用于检查字符串列表/数组中的字符串的 C# 最佳实践 (LINQ) [关闭]

Posted

技术标签:

【中文标题】用于检查字符串列表/数组中的字符串的 C# 最佳实践 (LINQ) [关闭]【英文标题】:C# Best practice (LINQ) for check a string in a List/Array of strings [closed] 【发布时间】: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)); 应该是最好的方式,谢谢。 【参考方案1】:

最简单的方法,所以不用子串而是全串比较:

bool myAnimalIsContained = animals.Contains(MyAnimal);

不区分大小写:

bool myAnimalIsContainedOgnoringCase 
    = animals.Contains(MyAnimal, StringComparer.OrdinalIgnoreCase);

但是您想检查列表中的任何动物名称是否包含您的动物作为子字符串?

那么你可以使用:

bool myAnimalIsContainedAsSubstring = animals.Any(a => a.Contains(MyAnimal));

不区分大小写:

bool myAnimalIsContainedAsSubstringIgnoringCase 
    = animals.Any(a => a.IndexOf(MyAnimal, StringComparison.OrdinalIgnoreCase) >=0);

【讨论】:

感谢您的回答蒂姆,现在我只有一个比较要做,但也许以后我会有其他的。

以上是关于用于检查字符串列表/数组中的字符串的 C# 最佳实践 (LINQ) [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 中的矩形数组中提取一维数组的最佳方法是啥?

使用 C# 检查字符串是不是包含字符串数组中的字符串

C# 检查字符串是不是包含字符串数组中的任何匹配项

C# 检查对象和字符串的最佳实践 [关闭]

检查二维数组c#中的某些元素是不是相等

如何使用 C# 从字符串数组制作类似枚举的 Unity 检查器下拉菜单?