【发布时间】:2021-05-21 05:28:49
【问题描述】:
我正在尝试检查字符串是否在字符串列表/数组中
我知道最简单的方法是:
string[] animals = {"cat", "Dog", "Lizard", "Goat", "Mouse", "Cow"};
string MyAnimal = "Dog";
bool myAnimalIsValid = false;
foreach (string animal in animals)
{
if (animal == MyAnimal // or animal.Contain(MyAnimal))
{
myAnimalIsValid = true;
}
}
if (myAnimalIsValid)
{
//my code
}
我知道还有其他方法可以做到这一点,例如使用 Select() 或 Where() 你认为有一个很好的优化方法吗?
【问题讨论】:
-
bool myAnimalIsValid = animals.Any(a => a == MyAnimal); -
Linq 不是魔法。代码仍然必须遍历所有项目,直到找到匹配项,它只是将其隐藏在漂亮的扩展方法后面。优化所缺少的只是
break。 -
比较简单:
bool myAnimalIsValid = animals.Contains(MyAnimal) -
如果要进行大量比较,将数组存储在 HashSet 中可能会快一些。
-
就我而言,我认为
bool myAnimalIsValid = animals.Any(a => a.contain(MyAnimal));应该是最好的方式,谢谢。
标签: c# arrays string list linq