唯一字符串的有效列表C#

唯一字符串的有效列表C#,c#,unique-values,C#,Unique Values,存储忽略任何重复项的字符串列表的最有效方法是什么? 我在想,字典最好是通过写dict[str]=false来插入字符串;并将键作为列表进行枚举。这是一个好的解决方案吗?如果您使用的是.NET 3.5,则应该适合您 HashSet)类提供 高性能集合操作。一套 是一个不包含 重复元素,以及其元素 没有特别的顺序 这不是系统名称空间的一部分,但已将中的Iesi.Collections和NHibernate一起使用。它支持哈希集、排序集、字典集等。自从它与NHibernate一起使用以来,它已被广泛使

存储忽略任何重复项的字符串列表的最有效方法是什么?
我在想,字典最好是通过写dict[str]=false来插入字符串;并将键作为列表进行枚举。这是一个好的解决方案吗?

如果您使用的是.NET 3.5,则应该适合您

HashSet)类提供 高性能集合操作。一套 是一个不包含 重复元素,以及其元素 没有特别的顺序


这不是系统名称空间的一部分,但已将中的Iesi.Collections和NHibernate一起使用。它支持哈希集、排序集、字典集等。自从它与NHibernate一起使用以来,它已被广泛使用,并且非常稳定。这也不需要.NET3.5,您可以这样做

var hash = new HashSet<string>();
var collectionWithDup = new []{"one","one","two","one","two","zero"}; 

// No need to check for duplicates as the Add method
// will only add it if it doesn't exist already
foreach (var str in collectionWithDup)
    hash.Add(str);   
var hash=new HashSet();
var collectionWithDup=new[]{“一”、“一”、“二”、“一”、“二”、“零”};
//作为Add方法,无需检查重复项
//仅当它不存在时才会添加它
foreach(集合中的var str与DUP)
hash.Add(str);

我不确定这是否算是一个好答案,但当需要一个唯一的集合来维护插入顺序时,我会同时使用哈希集和列表。在这种情况下,无论何时向集合中添加,请执行以下操作:

if(hashSet.Add(item))
    orderList.Add(item);

删除项目时,请确保从两个项目中删除它们。因此,只要您能够确保列表中没有添加任何其他项,您将拥有一个插入顺序唯一集

使用HashSet,无需检查.Contains(),只需在列表中添加您的项,如果重复,则不会添加

   HashSet<int> uniqueList = new HashSet<int>();
   uniqueList.Add(1); // List has values 1
   uniqueList.Add(2);  // List has values 1,2
   uniqueList.Add(1);  // List has values 1,2
   Console.WriteLine(uniqueList.Count); // it will return 2
HashSet uniqueList=newhashset();
唯一列表。添加(1);//列表的值为1
唯一列表。添加(2);//列表的值为1,2
唯一列表。添加(1);//列表的值为1,2
Console.WriteLine(uniqueList.Count);//它将返回2

这里是另一个不使用
哈希集的解决方案

var items = new List<string>() { "one", "one", "two", "one", "two", "zero" };
var uniqueItems = items.Where((item, index) => items.IndexOf(item) == index);
列表
哈希集
排序集
的性能测试。100万次迭代:

列表:564毫秒
哈希集:487毫秒
分类集:1932毫秒

您也可以使用Linq,如下所示:

using System.Linq;

var items = new List<string>() { "one", "one", "two", "one", "two", "zero" };

List<string> distinctItems = items.Distinct().ToList();
使用System.Linq;
var items=新列表(){“一”、“一”、“二”、“一”、“二”、“零”};
列表区分项=items.Distinct().ToList();

您不需要使用哈希集进行包含检查。您可以直接调用Add方法,它将返回true或false,具体取决于该项是否已存在。应编辑Answer以删除对redundant Contains的调用。这就是上述示例工作所需的全部内容:var collectionWithDup=new[]{“一”、“一”、“二”、“一”、“二”、“零”};var uniqueValues=新哈希集(collectionWithDup);但是
HashSet
将丢失项目的顺序。
List
提供了一个功能。另外:还有一个SortedSet,它是一个方便的排序哈希集。还要注意,哈希集不能通过indice访问,只能通过枚举器访问,而不是列表。
using System.Linq;

var items = new List<string>() { "one", "one", "two", "one", "two", "zero" };

List<string> distinctItems = items.Distinct().ToList();