删除 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<T>
? .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 中的重复项的主要内容,如果未能解决你的问题,请参考以下文章
从 ArrayList 的 ArrayList 中删除重复项 [重复]