唯一字符串的有效列表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();