gpt4 book ai didi

c# - 什么是比较 string.tolower 更好的选择?

转载 作者:行者123 更新时间:2023-12-05 08:45:56 24 4
gpt4 key购买 nike

根据我过去的经验和 stackoverflow,我了解到 String.ToLower() 的性能很差。现在我有以下问题,当特定单词在一个巨大的列表中时,我需要过滤掉或执行特定操作。

我想修复的旧方法:

if (input.Any(i => i.ToLower() == "alle" || i.ToLower() == "all" || i.ToLower() == "none") 
{
// do something
}

我正在考虑使用哈希集,但我质疑性能以及它如何处理区分大小写,我基本上不关心区分大小写。使用哈希集对我来说有意义吗?

我目前的解决方案建议:

var unwantedInputsSet = new HashSet<string> {"alle", "all", "none"};
if (input.Any(i => i => unwantedInputsSet.Contains(i)))
{
// do something
}

有没有更好的选择。您有什么想法可以更好地解决这个问题吗?

最佳答案

你可以通过 comparerHashSet,例如 StringComparer.InvariantCultureIgnoreCase :

var unwantedInputsSet = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase) {"alle", "all", "none"};
if (input.Any(i => unwantedInputsSet.Contains(i)))
{
// do something
}

或者,按照评论中的建议,使用模式匹配:

if (input.Any(i => i.ToLower() is "alle" or "all" or "none") 
{
// do something
}

应该是 turned by compiler放入与您的代码类似的代码中(尽管应该调用一次 ToLower)。

至于性能 - 它可能在很大程度上取决于实际数据,您应该使用预期的数据集来衡量它。对于小型搜索集,HashSet 的性能可能比以下几个比较差:

var cmpr = StringComparison.InvariantCultureIgnoreCase;
if (input.Any(i => string.Equals(i, "alle", cmpr) || string.Equals(i, "all", cmpr) || string.Equals(i, "none", cmpr)))
{
// do something
}

对于此类基准测试,我建议查看 BenchmarkDotNet .

关于c# - 什么是比较 string.tolower 更好的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70943442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com