我有一个列表中的单词列表。使用 .Contains(),我可以确定一个单词是否在列表中。如果我指定的单词在列表中,我如何从列表中获取单词的区分大小写的拼写?例如,当单词是“磷酸钠”但列表包含“磷酸钠”时,.Contains() 为真。如何执行不区分大小写的搜索(“磷酸钠”)但从列表中返回区分大小写的匹配项(“磷酸钠”)?
我更喜欢避免使用键为大写且值正确大小写的字典,反之亦然。
你想要这样的东西:
string match = list.FirstOrDefault(element => element.Equals(target,
StringComparison.CurrentCultureIgnoreCase));
如果找不到匹配项,这将match
作为null
参考。
(您可以使用List<T>.Find
,但 usingFirstOrDefault
使代码更通用,因为它可以在任何字符串序列上使用 -using System.Linq;
在文件顶部使用指令。)
请注意,我假设列表中没有空元素。如果您想处理这个问题,您可能需要使用静态方法调用:string.Equals(element, target, StringComparison.CurrentCultureIgnoreCase)
.
另请注意,我假设您想要一个文化敏感的比较。请参阅StringComparison
其他选项。
考虑具有不区分大小写比较的字典是否适合您。除非您关心单词的顺序,否则您Dictionary
的查找性能会比列表好得多。
Dictionary<string, string> openWith =
new Dictionary<string, string>(
StringComparer.CurrentCultureIgnoreCase);
您也可以StringComparer
在列表中使用
if (listOfValues.Contains(value, StringComparer.OrdinalIgnoreCase))