如何检查列表<string>是否包含任何字符串值</string>

时间:2011-10-13 22:41:13

标签: c# string list .net-4.0 contains

以下代码是list元素。

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

在添加新字符串之前,我想检查列表是否包含我要添加的字符串。我怎样才能以最有效的方式做到这一点。

我可以遍历整个列表并检查,但我认为这不会是性能明智的。

6 个答案:

答案 0 :(得分:11)

最有效的方式是简单地使用HashSet<T>代替列表(如果顺序无关紧要)或另外到列表中,如果是的话。

即。任

HashSet<string> lsLinks = new HashSet<string>();
// now just Add() all you like; only ever one of each, but order is not defined

List<string> lsLinks = new List<string>();
HashSet<string> unique = new HashSet<string>();
// now, when needed, check if the item is new to "unique"
if(unique.Add(newValue)) lsLinks.Add(newValue);

您可能还会在LINQ中找到.Distinct()的用法,即

var uniqueList = someSourse.Distinct().ToList();

答案 1 :(得分:6)

如果你 拥有List<string>,而你无法先排序,那么你无能为力,这比简单{{1}更快走遍整个清单。如果列表已排序,则可以执行二进制搜索。

如果您可以使用Contains,那么随着集合变大,这显然会更快。 (对于小集合,性能差异可能无关紧要。)

请注意,HashSet<string>确实保留元素的顺序 - 所以如果这对您很重要,您可能希望保留HashSet<T> 一个HashSet<string>。然后你可以这样做:

List<string>

请注意,如果您目前只关注摘要中的性能,则应设置适当的目标以确定足够快的内容,并根据这些目标进行衡量 - 同时编写最简单的代码。您是否知道该列表实际上会在您的实际应用程序中变大?

答案 2 :(得分:2)

List <string> lsLinks = new List<string>();
bool contains = lsLinks.Any(s => s.Equals("myString");

答案 3 :(得分:2)

您可以使用以下内容:

 lsLinks.Contains(myString);

 lsLinks.Where(o=>o==myString);

但是如果您的目标是确保唯一字符串,则可以使用HashSet而不是List,   如果字符串的顺序不重要。

答案 4 :(得分:2)

您可以使用HashSet而不是List&lt;&gt;如果你不关心物品的顺序。该集合特别设计用于比较操作中的最佳速度,因为它使用哈希值。

答案 5 :(得分:1)

我不确定我理解你想要什么,但试试这个:

if(!lsLinks.Contains(NewString)) lsLinks.Add(NewString)