需要:快速高效地存储一堆不区分大小写的字符串的 .Net 集合

发布于 2024-10-11 23:20:09 字数 333 浏览 3 评论 0原文

我正在寻找一个简单的集合,它将以不区分大小写的方式存储一堆字符串。我至少需要一个 Contains()Remove() 方法来查看某个字符串是否存在并删除该字符串。

我尝试过 List 但那个是区分大小写的。我需要可以使用不区分大小写的 Dictionary,但这“感觉”像是浪费空间。对每个字符串执行 ToLower() 会浪费性能。

有谁知道我应该使用哪种.Net 集合?

I'm looking for a simple collection that will store a bunch of strings in a case insensitive way. I need at least a Contains() and Remove() method to see if a certain string is present and to remove that string.

I've tried List<string> but that one is case sensitive. I need could use a case insensitive Dictionary<TKey, T>, but that "feels" like a waste of space. Doing a ToLower() on each string is a waste of performance.

Does anyone know what kind .Net collection I should use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

许久 2024-10-18 23:20:09

您应该使用新的 HashSet(StringComparer.OrdinalIgnoreCase)
请注意,这是一个无序集合。

You should use a new HashSet<string>(StringComparer.OrdinalIgnoreCase).
Note that this is an unordered set.

余罪 2024-10-18 23:20:09

您可以使用 StringDictionary< /a>.

You could use a StringDictionary.

请恋爱 2024-10-18 23:20:09

今天有同样的问题需要解决。如果您可以包含 Linq,那么您的 List 将获得带有比较器的重载方法。

using System.Linq;

List<string> stringList = new List<string>();
stringList.Contains("hello", StringComparer.OrdinalIgnoreCase);

希望这有帮助:
马丁

Had the same problem to solve today. If you can include Linq, then your List gets overloaded methods with a comparer.

using System.Linq;

List<string> stringList = new List<string>();
stringList.Contains("hello", StringComparer.OrdinalIgnoreCase);

Hope this helps:
Martin

鹊巢 2024-10-18 23:20:09

默认情况下,字典不区分大小写。但您可以实现自己的变体以使其不敏感。 (我可能是错的:D)

我对 Dictionary 也有同样的问题,但在尝试了很多 IEquality 实现之后,最后我用 LINQ 解决了问题。

string k = customers.Where(c => c.Key.Equals(valueToSearch, StringComparison.OrdinalIgnoreCase)).FirstOrDefault().Key;

if (!string.IsNullOrEmpty(k) && k.ToUpper() == valueToSearch.ToUpper())
{
    // Do some thing
}

希望这对将来的人有所帮助。

桑杰·扎尔克

By default Dictionary are not case in-sensitive. But you can implement your own variant to make it in-sensitive. (I might be wrong on this :D)

I had same issue with Dictionary but then after trying a lot of IEquality implementations, finally I settled the score with LINQ.

string k = customers.Where(c => c.Key.Equals(valueToSearch, StringComparison.OrdinalIgnoreCase)).FirstOrDefault().Key;

if (!string.IsNullOrEmpty(k) && k.ToUpper() == valueToSearch.ToUpper())
{
    // Do some thing
}

Hope this will help somebody in future.

Sanjay Zalke

凡间太子 2024-10-18 23:20:09

编写您自己的 Contains()Remove() 方法,它们执行不区分大小写的比较。

Write your own Contains() and Remove() methods, which perform the case insensitve comparison.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文