删除 Arraylist C# 2.0 中的重复项

Posted

技术标签:

【中文标题】删除 Arraylist C# 2.0 中的重复项【英文标题】:Remove Duplicates in Arraylist C# 2.0 【发布时间】:2013-09-23 16:22:05 【问题描述】:

我正在寻找的是从 idFAV 中删除重复项,然后将其放入文本字​​段中。有任何想法吗?我正在研究 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();
               

              

【问题讨论】:

您为什么使用ArrayList 而不是List&lt;T&gt;? .Net 2.0 和 C# 2.0 中提供了通用集合。 列表中有哪些类型的对象? 【参考方案1】:

如果这是您使用 ArrayList 的所有地方,那么最简单的解决方法是在添加之前检查 idFAV 是否​​包含 FileName,并且您将永远不会有重复。或者,如果此数组列表在某处被修改,那么您可以创建一个新的 Arraylist 并循环遍历 idFAV 中的所有项目,并且仅当它不存在于新列表中时才添加。

【讨论】:

如何将其从 idFAV 中删除?我一直在网上到处找,找不到任何例子。 您不必删除它。您可以使用 newList.Contains(obj) 方法检查条目是否已存在【参考方案2】:

如果在添加之前检查它,则不需要删除... 例如:

           foreach (var iMeter in meter)
              
                   if (!ip.Contains(iMeter.IP))
                    
                          ip.Add(iMeter.IP);
                      
              

【讨论】:

【参考方案3】:

您可以尝试构建新的 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 是字符串,则无需担心。

【讨论】:

变种? CS0246:找不到类型或命名空间名称“var”(您是否缺少 using 指令或程序集引用?)【参考方案4】:

这是完成任务的一种方法。我确信它可以简化,但我想列出流程中的每个步骤。

// 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");

【讨论】:

【参考方案5】:
using System; using System.Collections;
using System.Collections.Generic;
using System.Linq;

class Program 
 
static void Main() List list = new List();
Console.WriteLine("number: "); int num = int.Parse(Console.ReadLine());
while (num > 0)  list.Add(num % 10); num /= 10;  list.Reverse();
List distinct = list.Distinct().ToList();
PrintValues(distinct);
static void PrintValues(IEnumerable distinct) 

 foreach (object value in distinct) Console.Write("0", value); 
  Console.WriteLine();
 


【讨论】:

最好能对解决方案进行某种文字说明,而不仅仅是粘贴代码。

以上是关于删除 Arraylist C# 2.0 中的重复项的主要内容,如果未能解决你的问题,请参考以下文章

C#ArrayList重复数据删除

从 ArrayList 的 ArrayList 中删除重复项 [重复]

Java删除ArrayList中的重复对象[重复]

从 C# 中的 List<T> 中删除重复项

从ArrayLists的ArrayList中删除重复项[重复]

支持获取、设置和删除某些索引的 java arraylist 的 C# 等效项