2013-09-23 5 views
-1

Я ищу, чтобы дубликаты были удалены из idFAV, а затем помещены в текстовое поле. Есть идеи? Я работаю над C# 2.0.Удалить дубликаты в Arraylist C# 2.0

// main.cs

public void Page_Load(object sender, EventArgs e) 
    { 
     Session["FAVisible"] = new ArrayList(); 
    } 

// share.cs

public void Page_Load(object sender, EventArgs e) 
      { 
       ArrayList idFAV = (ArrayList)Session["FAVisible"]; 
       idFAV.Add(FileName)); 
       Session["FAVisible"] = idFAV; 

       for(int i=0; i < DisplayCount; i++) 
       { 
        FileAttachedVisible.Text = idFAV[i].ToString(); 
       } 

       } 
+2

Почему вы используете 'ArrayList' вместо' 'Список ? Общие коллекции были доступны в версиях .Net 2.0 и C# 2.0. –

+0

Какие типы объектов в списке? – Servy

ответ

1

Если это все места, которые вы используете ArrayList, то простым способом исправить это проверить, если idFAV содержит FileName перед добавлением, и у вас никогда не будет дубликатов. Или, если этот список массивов где-то изменен, вы можете создать новый Arraylist и перебрать все элементы в idFAV и добавить только в том случае, если его нет в новом списке.

+0

Как удалить его из idFAV? Я искал всюду в Интернете и не могу найти никаких примеров. – user2800287

+0

Вам не нужно его удалять. Вы можете использовать метод newList.Contains (obj), чтобы проверить, существует ли запись уже – appcoder

0

Вы можете попробовать создать новый ArrayList и проверить, добавлен ли какой-либо новый элемент в этот список.

ArrayList result = new ArrayList(); 

foreach(var elem in idFav) 
{ 
    if (!result.Contains(elem)) 
    { 
     result.Add(elem); 
    } 
} 

Конечно, выполнение этого решения не является лучшим (O (n^2)). Было бы лучше попытаться сыграть с Hashsets/dicitonaries и сделать это в O (n).

Кроме того, для этого для работы с объектами в ArrayList необходимо иметь Equals. Если FileName является строкой, вам не нужно беспокоиться.

+0

var? CS0246: Тип или имя пространства имен «var» не удалось найти (вам не хватает директивы using или ссылки на сборку?) – user2800287

0

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

// Build ArrayList 
ArrayList al = new ArrayList(); 
al.Add(1); 
al.Add(1); 
al.Add(2); 
al.Add(2); 
al.Add(3); 
al.Add(4); 
al.Add(4); 
al.Add(4); 

// Create List from ArrayList 
List<object> oList = new List<object>(al.ToArray()); 

// Declare holder to distinct values 
List<object> distinctValues = new List<object>(); 

// Get distinct values 
oList.ForEach(delegate(object o) { 
    if (!distinctValues.Contains(o)) { 
     distinctValues.Add(o); 
    } 
}); 

// Copy original list as a list with duplicates 
List<object> duplicateValues = new List<object>(oList); 

// Remove the first instance of each distinct value 
// leaving all duplicates 
distinctValues.ForEach(delegate(object o){ 
    duplicateValues.Remove(o); 
}); 

// Display distinct values 
foreach (object o in distinctValues) { 
    MessageBox.Show(o.ToString(), "Distinct"); 
} 

// Display duplicate values 
foreach (object o in duplicateValues) { 
    MessageBox.Show(o.ToString(), "Duplicate"); 
} 
0

Вам не нужно удалить, если вы проверить это, прежде чем добавить ... Например:

  foreach (var iMeter in meter) 
       { 
        if (!ip.Contains(iMeter.IP)) 
        { 
          ip.Add(iMeter.IP); 
         } 
       } 
Смежные вопросы