我有HashSet参数的方法.我需要在其中做不区分大小写的包含:
public void DoSomething(HashSet<string> set, string item)
{
var x = set.Contains(item);
...
}
Run Code Online (Sandbox Code Playgroud)
是否可以使现有的HashSet不区分大小写(不创建新的)?
我正在寻找具有最佳性能的解决方案.
编辑
包含可以多次调用.因此,由于性能低于本机HashSet Contains方法,IEnumerable扩展对我来说是不可接受的.
解
既然,回答我的问题是NO,那是不可能的,我已经创建并使用了以下方法:
public HashSet<string> EnsureCaseInsensitive(HashSet<string> set)
{
return set.Comparer == StringComparer.OrdinalIgnoreCase
? set
: new HashSet<string>(set, StringComparer.OrdinalIgnoreCase);
}
Run Code Online (Sandbox Code Playgroud) 我需要一个字符串列表和一种快速确定字符串是否包含在该列表中的方法.
为了提高查找速度,我认为SortedList和Dictionary; 但是,KeyValuePair当我需要的只是一个时,两者都可以使用string.
我知道我可以使用a KeyValuePair而忽略该Value部分.但我更喜欢高效,我只是想知道是否有更适合我要求的系列.
假设我需要比较字符串x是"A","B"还是"C".
使用Python,我可以使用运算符来轻松检查.
if x in ["A","B","C"]:
do something
Run Code Online (Sandbox Code Playgroud)
使用C#,我可以做到
if (String.Compare(x, "A", StringComparison.OrdinalIgnoreCase) || ...)
do something
Run Code Online (Sandbox Code Playgroud)
它可以与Python更相似吗?
我需要添加System.Linq以便使用不区分大小写的Contain().
using System;
using System.Linq;
using System.Collections.Generic;
class Hello {
public static void Main() {
var x = "A";
var strings = new List<string> {"a", "B", "C"};
if (strings.Contains(x, StringComparer.OrdinalIgnoreCase)) {
Console.WriteLine("hello");
}
}
}
Run Code Online (Sandbox Code Playgroud)
要么
using System;
using System.Linq;
using System.Collections.Generic;
static class Hello {
public static bool In(this string source, params string[] list)
{
if (null == …Run Code Online (Sandbox Code Playgroud)