【问题标题】:C# Collections for Distinct Data不同数据的 C# 集合
【发布时间】:2011-12-20 08:35:55
【问题描述】:

我有一堆字符串数据,我可以一个一个循环。什么是好的集合(以及如何实现它)以便我只获得不同的字符串?

我正在为其执行此操作的客户端甚至不使用 .NET 3.5,因此 .Distinct 已退出。他们使用 .NET 框架 2.0。

我一次读一个列表,在我读完之前不知道它会有多少条记录。

【问题讨论】:

  • HashSet,但是会丢失集合的顺序。
  • 我有一堆重复的随机数据,我想存储唯一的数据。我应该使用什么?
  • 在 php 中我只需将所有内容加载到一个数组中,然后调用 array_unique()
  • 什么是 .net 等价物
  • .Net 相当于 php 中的 array_unique 将是 linq Distinct() 方法,正如我在下面的回答中一样。 ...至少大致上,它完成了工作。

标签: c# asp.net collections


【解决方案1】:

一种方法是使用Distinct 使您的字符串独一无二:

List<string> a = new List<string>();
a.AddRange(new string[] { "a", "b", "a", "c", "d", "b" });
List<string> b = new List<string>();
b.AddRange(a.Distinct());

关于 LINQ 的 Distinct 的另一个资源:http://blogs.msdn.com/b/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx

另一种方式:按照其他人的建议使用HashSet

HashSet<string> hash = new HashSet<string>(inputStrings);

查看此链接,了解如何在 .net 2.0 中实现它:https://stackoverflow.com/a/687042/284240

如果您不在 3.5 上,您也可以手动操作:

List<string> newList = new List<string>();

foreach (string s in list)
{
   if (!newList.Contains(s))
      newList.Add(s);
}
// newList contains the unique values

另一种解决方案(可能快一点):

Dictionary<string,bool> dic = new Dictionary<string,bool>();

foreach (string s in list)
{
   dic[s] = true;
}

List<string> newList = new List<string>(dic.Keys);
// newList contains the unique values

https://stackoverflow.com/a/1205813/284240

【讨论】:

    【解决方案2】:

    如果您使用的是 .Net 3.5 或更高版本,请将字符串放入 List&lt;&gt; 并使用 linq 方法 Distinct()

    using System.Linq;
    
    IEnumerable<string> strs = new List<string>(new[] { "one", "two", "three", "one" });
    
    var distinct = strs.Distinct();
    

    在 .Net 2.0 中,您别无选择,只能手动进行。

    【讨论】:

      【解决方案3】:

      也许我很密集并且没有完全理解这个问题,但你不能只使用常规 List 并使用 .Contains 方法检查每个字符串是否存在于列表中,然后再将其添加到循环中?如果您有很多字符串,您可能需要关注性能。

      【讨论】:

        猜你喜欢
        • 2013-03-22
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2011-04-29
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多