2013-09-23 71 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

?泛型集合在.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

您不必删除,如果你检查一下前加... 例如:你为什么要使用`ArrayList`,而不是`名单 `

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