【问题标题】:C# Best practice (LINQ) for check a string in a List/Array of strings [closed]用于检查字符串列表/数组中的字符串的 C# 最佳实践 (LINQ) [关闭]
【发布时间】: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


【解决方案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);

【讨论】:

  • 感谢您的回答蒂姆,现在我只有一个比较要做,但也许以后我会有其他的。
猜你喜欢
  • 2020-12-10
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多