Заполнить массив недостающими значениями - Visual Basic .NET
Формулировка задачи:
Здравствуйте! Ситуация такая, имеется listview, со значениями типа 1,2,3,4,6,7,9
Задача такая:
Нужно из всех имеющихся значений составить массив, а потом перебрать его, начиная от 1 и далее, переменная n должна быть равна
a) пропущенному значению
б) если пропущенных значений нет, то максимальному значению +1
На данный момент я пока работаю по варианту б
Как найти пропущенное значение? К примеру в той последовательности, что я дал 1,2,3,4,6,7,9 , n должно равняться 5.
При следующем заходе 8, а потом уже по варианту б = 10
далее использую
Листинг программы
- For i = 0 To ListView1.Items.Count - 1
- Me.ListView1.Items(i).Focused = True
- If CInt(ListView1.FocusedItem.Text) > n Then
- n = CInt(ListView1.FocusedItem.Text)
- End If
- Next
- n = n + 1
Все, разобрался, при отображении сортирую listview
Листинг программы
- ListView1.Sorting = SortOrder.Ascending
Листинг программы
- Dim k As Integer = 1
- For i = 0 To ListView1.Items.Count - 1
- Me.ListView1.Items(i).Focused = True
- If k <> CInt(ListView1.FocusedItem.Text) Then
- n = k
- Exit Sub
- End If
- k = k + 1
- Next
- If n = 1 Then n = k
Решение задачи: «Заполнить массив недостающими значениями»
textual
Листинг программы
- ' Получаем отсортированный числовой список значений
- Dim lvItems = From item As ListViewItem In ListView1.Items Select i = Integer.Parse(item.Text) Order By i
- ' Создаем список пропущенных значений, дополненный увеличенным на один наибольшим значением
- Dim missedItems = lvItems.Zip(lvItems.Skip(1), Function(x, y) Enumerable.Range(x + 1, y - x - 1)).SelectMany(Function(x) x).Concat(New Integer() {lvItems.Max + 1})
- ' Добавляем список в ListView
- ListView1.Items.AddRange(missedItems.Select(Function(x) New ListViewItem(x.ToString)).ToArray)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д