2016-01-14 7 views
0

я хочу campare 2 ArrayList и показать значение ..сравнить 2 ArrayList в vb.net

arraylist1 = {1,2,3,4,5,6,7,8,9} 

arraylist2 = {2,4,5} 

я сравнить и значение ListView .. как этого

1 Not available 
2 available 
3 Not available 
4 available 
5 available 
6 Not available 

я пишу программа как это, но сквозные много раз ..

For position As Integer = 0 To arraylist1.Count - 1 
    Dim words As String() = arraylist2(position).Split(New Char() {" "c}) 
    arr(1) = words(3) 
    For i = 0 To arr.Length - 1 
    If arraylist1(i).Contains(arr(1)) Then 
     arr(0) = i 
     arr(2) = "working" 
     itm = New ListViewItem(arr) 
     lv1.Items.Add(itm) 
    Else 
     arr1(0) = i 
     arr1(1) = arrproc(i) 
     arr1(2) = "NOT working" 
     itm = New ListViewItem(arr1) 
     lv1.Items.Add(itm) 
    End If 
    Next 
Next 
+1

Не используйте 'ArrayList' больше, а общий список, в этом случае' List (Of Int32) ' –

+0

небольшой пример – TOM

+0

Что вы показываете, когда элемент существует в списке2, но не в списке1? –

ответ

2

, как Тим предлагал использовать List (Of Integer)

вроде этого

Dim list1 As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9} 
Dim list2 As New List(Of Integer) From {2, 4, 5} 

     For Each i As Integer In list1 

      If list2.Contains(i) Then 

       Console.WriteLine(i & " available") 
      Else 

       Console.WriteLine(i & " Not available") 

      End If 

     Next 

также в вашем коде в первом цикле, вы используете индекс arraylist1 в arraylist2, чтобы получить слова это и не будет работать, если оба списка не имеют одинаковое количество детали и будут работать в амбулаторное исключении ограничивающей

EDIT

Так есть несколько проблем, чтобы решить, я думаю

  • You петли над arraylist1 для извлечения предметов из arraylist2
  • использовать четвертое слово из этого пункта и назначить его случайный массив (обры())
  • то цикл по этой случайной матрице и сравнить второй элемент в , что массив со всем пунктом из arraylist1 в индексах этого случайного массива

поэтому мое предложение, чтобы проверить ваш код снова

это может работать, но до сих пор некоторые вопросы, чтобы ответить

For Each item_list1 As String In arraylist2 
      Dim words As String() = item_list1.Split(New Char() {" "c}) 
      If arraylist1.contains(words(3)) Then 
       itm = New ListViewItem(arraylist1.IndexOf(words(3))) 
       itm.SubItems.Add(words(3)) 
       itm.SubItems.Add("working") 
      Else 
       itm = New ListViewItem(arraylist1.IndexOf(words(3))) 
       itm.SubItems.Add(arrproc(arraylist1.IndexOf(words(3)))) 
       itm.SubItems.Add("NOT working") 
      End If 
      lv1.items.add(itm) 
     Next 
+0

проблема заключается в добавлении в listview ..... – TOM

+0

вы можете дать вам пример реального мира, где вы разбиваете значения одного списка массивов и что делает функция arrprc (i)? – Markus

+0

здесь значение показывает несколько таймсов .. – TOM

1

Вы можете использовать такой Linq запрос сравнить эти списки и возвращать состояние внешнего вида элементов первого списка в seccond списка:

Dim list1 = {1, 2, 3, 4, 5, 6, 7, 8, 9} 
Dim list2 = {2, 4, 5} 
Dim data = list1.Select(Function(item) 
       Return New With 
       { 
        .Value = item, 
        .Status = String.Format("{0} {1}", item, IIf(list2.Contains(item), "Available", "Not Available")) 
       } 
       End Function).ToList() 

Тогда вы можете просто добавить их в ListView так:

For Each item In data 
    Me.ListView1.Items.Add(item.Value.ToString()).SubItems.Add(item.Status) 
Next 
1

Полный пример

Sub Main() 

     Dim list1 As New List(Of Integer)() From {1, 2, 3, 4, 5, 6, 7, 8, 9} 
     Dim list2 As New List(Of Integer)() From {2, 4, 5} 

     Dim rows = From i In list1 
        Group Join j In list2 
        On j Equals i Into g = Group 
        From j In g.DefaultIfEmpty() 
        Select i, j 


     For Each r In rows 
      Console.WriteLine("{0} {1}", r.i, If(r.i = r.j, "exist", "not exist")) 
     Next 


     Console.ReadLine() 
    End Sub 
Смежные вопросы