2011-05-31 5 views
1
Dim ItemList As New ArrayList() 

For i = 0 To dgExtract.Items.Count - 1 
     gRow = dgExtract.Items(i) 
     chk = gRow.FindControl("chkSelect") 
     If chk.Checked Then 
      sEmail = gRow.Cells(7).Text 
      dim number as string = Regex.Replace(sEmail,"[^0-9]","") 
      if number.length = 11 then 
       ItemList.Add(number) 
      end if 
     end if    
Next 

Я создаю массив ItemList с указанным выше кодом. Как удалить дубликаты в этом массиве?Vb.net Как удалить дубликаты из массива?

+2

Я бы не использовать в ArrayList когда-нибудь (ну, может быть, будет какая-то странная ситуация, когда я бы). Лучше использовать List (Of String) в этом случае. – Neverbirth

+0

К сожалению, иногда мы поддерживаем устаревший код, т. Е. .Net 1.1. – Roman

ответ

7

Окружение:

Dim number As Integer 
Dim num As String 
Dim al As New ArrayList() 
If Not (al.Contains(number)) Then 
    al.Add(number) 
End If 

Getting:

For Each number In al 
    num = number.ToString() 
Next 
4

Вместо проверки и удаления повторяющихся элементов вы можете проверить, находится ли он в массиве, если он не существует, вы можете добавить в массив, иначе ничего не делать.

Объявить объект List<string>, названный, например, list. В цикле:

If Not list.Contains(number) Then 
    list.Add(number) 
4

Вы бы объявить некоторый массив (или список, или любой другой коллекции вы можете предпочесть) и будет делать что-то вроде:

Array.Resize(numberArray, numberArray.Length + 1) 
numberArray[numberArray.Length - 1] = number 

Тогда вы могли бы использовать LINQ:

numberArray.Distinct() 

И затем, итерации массива и делать все, что вам нужно.

EDIT: Лучше, что сказал Srinivasan__, проверьте, существует ли элемент, и если он его не добавляет. Чтобы проверить это, вы можете использовать Exists(). Или, если вы используете что-то вроде List, Contains().

+0

Почему это не # 1? –

0

Почему бы вам не проверить, как этот

if number.length = 11 then 
    if Not ItemList.contains(number) 
     ItemList.Add(number) 
1
 int i; 
     int j; 
     int count = 0; 
     int[] list = new int[5]; 
     //to add 5 data with duplicate 
     list[0] = 1; 
     list[1] = 5; 
     list[2] = 2; 
     list[3] = 4; 
     list[4] = 5; 
     #region toremovetheduplicate 
     int c = 0, flag = 0; 
     int[] list1 = new int[5]; 
     for (i = 0; i < list.Length; i++) 
     { 
      flag = 0; 
      for (j = i + 1; j < list.Length; j++) 
      { 

       if (i != j) 
       { 
        if (list[i] == list[j]) 
        { 
         flag = 1; 
        } 
       } 
      } 
      if (flag == 0) 
      { 
       list1[c] = list[i]; 
       c++; 
      } 
     } 
0

Я только что видел это, я попытался следующий код ; он отлично работает, я использую CheckedListBox для просмотра результатов. Там используется 2 arraylist. «Darray» содержит исходный список дублированных строк. Тогда, «FinArray», чтобы сбросить не-дублирует строки, а затем отображать содержимое «FinArray» в ListBox:

Sub CleanDupes() 
    ' Clear listbox 
    CheckedListBox1.Items.Clear() 
    ' Create Final Array for non-duped data 
    Dim FinArray As New ArrayList 
    Dim InitFinarray, DarrayN, FinArrayN As String 
    ' Add first record from original array into new array 
    FinArray.Add(Darray.Item(0)) 
    InitFinarray = FinArray.Item(0) 
    CheckedListBox1.Items.Add("Select/Unselect All") 
    CheckedListBox1.Items.Add(InitFinarray) 
    ' Loop into Orig Array and compare each record with strings in new array, 
    ' if exist in new array, then skip, else add it 
    For n As Integer = 0 To Darray.Count - 1 
     DarrayN = Darray.Item(n) 
     For n2 As Integer = 0 To FinArray.Count - 1 
      If FinArray.Contains(DarrayN) Then 
      Else 
       FinArray.Add(DarrayN) 
       FinArray.Sort(1, FinArray.Count - 1, Nothing) 
      End If 
     Next 
    Next 
    'Display New Non-Duped Array in listbox 
    For n3 As Integer = 1 To FinArray.Count - 1 
     CheckedListBox1.Items.Add(FinArray(n3)) 
    Next 
    End Sub 
Смежные вопросы