C# 如何检查列表是否<;字符串>;是否包含任何字符串值

C# 如何检查列表是否<;字符串>;是否包含任何字符串值,c#,string,list,.net-4.0,contains,C#,String,List,.net 4.0,Contains,下面的代码是列表元素 List <string> lsLinks = new List<string>(); List lsLinks=new List(); 在添加新字符串之前,我想检查列表是否包含要添加的字符串。我怎样才能以最有效的方式做到这一点 我可以遍历整个列表并进行检查,但我认为这不利于性能。最有效的方法是简单地使用一个哈希集,或者替代列表(如果顺序不重要),或者在列表之外(如果顺序不重要) i、 e.要么 HashSet<string> lsL

下面的代码是列表元素

List <string> lsLinks = new List<string>();
List lsLinks=new List();
在添加新字符串之前,我想检查列表是否包含要添加的字符串。我怎样才能以最有效的方式做到这一点

我可以遍历整个列表并进行检查,但我认为这不利于性能。

最有效的方法是简单地使用一个
哈希集,或者替代列表(如果顺序不重要),或者在列表之外(如果顺序不重要)

i、 e.要么

HashSet<string> lsLinks = new HashSet<string>();
// now just Add() all you like; only ever one of each, but order is not defined
最有效的方法是简单地使用
哈希集
,而不是列表(如果顺序不重要),或者在列表之外(如果顺序不重要)

i、 e.要么

HashSet<string> lsLinks = new HashSet<string>();
// now just Add() all you like; only ever one of each, but order is not defined
如果你必须有一个
列表
,而且你不能先对它进行排序,那么没有什么比一个简单的
包含的
遍历整个列表更快的了。如果列表已排序,则可以改为执行二进制搜索

如果您可以使用
哈希集
,那么随着集的增大,这显然会快得多。(对于小型设备,性能差异可能无关紧要。)

请注意,
HashSet
并不保留元素的顺序,因此如果这对您很重要,您可能需要保留一个
HashSet
和一个
列表。然后你可以做:

if (stringSet.Add(newValue))
{
    stringList.Add(newValue);
}
请注意,如果您目前只关心抽象的性能,那么您应该设置适当的目标来确定什么是足够快的,并根据这些目标进行度量——同时编写尽可能简单的代码。您知道在实际应用程序中,列表实际上会变得很大吗?

如果您必须有一个
列表,并且不能首先对其进行排序,那么没有什么比简单的
包含
遍历整个列表更快的了。如果列表已排序,则可以改为执行二进制搜索

List <string> lsLinks = new List<string>();
bool contains = lsLinks.Any(s => s.Equals("myString");
如果您可以使用
哈希集
,那么随着集的增大,这显然会快得多。(对于小型设备,性能差异可能无关紧要。)

请注意,
HashSet
并不保留元素的顺序,因此如果这对您很重要,您可能需要保留一个
HashSet
和一个
列表。然后你可以做:

if (stringSet.Add(newValue))
{
    stringList.Add(newValue);
}
请注意,如果您目前只关心抽象的性能,那么您应该设置适当的目标来确定什么是足够快的,并根据这些目标进行度量——同时编写尽可能简单的代码。您知道列表在实际应用程序中实际上会变得很大吗?

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

我不确定我是否理解您的要求,但请尝试以下方法:

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

我不确定我是否理解您的要求,但请尝试以下方法:

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

您可以使用以下选项:

 lsLinks.Contains(myString);

但如果您的目标是确保字符串的唯一性,则可以使用哈希集而不是列表,
如果字符串的顺序不重要。

可以使用以下命令:

 lsLinks.Contains(myString);

但如果您的目标是确保字符串的唯一性,则可以使用哈希集而不是列表,
如果字符串的顺序不重要。

如果不关心项的顺序,可以使用哈希集而不是列表。该集合特别设计用于比较操作的最佳速度,因为它使用哈希。

如果不关心项的顺序,可以使用哈希集而不是列表。该集合特别设计用于最佳速度在使用散列的比较操作中。

我不明白,“列表”是什么?最简单的方法是使用框架的方法,这肯定比自己迭代要好。至于最有效的方法,如果你需要比
包含的
更好的性能,请看Marc的答案。我不明白,“列表”是什么?最简单的方法是使用框架的方法,这肯定比自己迭代要好。至于最有效的方法,好吧,如果您需要比
包含的
更好的性能,请参阅Marc的答案。不知道HashSet,那太好了。实际上,列表大小将是最大的,比如说200。对于这样小的数字,我还应该使用HashSet吗?顺序并不重要。@MonsterMMORPG在大数字时,散列集肯定会赢;在小数字时,如果你想确定-
O(n)
可能比
O(1)
小的
n
快-意思是:开销(所有散列等)对于小团体来说,它的好处大于它。再次强调:测量它。谢谢你的回答。我从每一个问题中学到了新的东西:DDidn不知道HashSet,这很好。实际上列表大小将是最大的,比如说200。我还应该对这么小的数字使用HashSet吗?顺序并不重要。@MonsterMMORPG在大的数字中,hash set肯定会赢;对于小的
n
,如果你想确定-
O(n)
可以比
O(1)
快,那么在小的
n
-意味着:开销(所有哈希等)对小团体来说,它的好处大于它。再次强调:衡量它。谢谢你的回答。我从每个问题中学到了新东西:D