通过ignorecase查找数组索引

时间:2012-07-19 08:10:14

标签: c# arrays string

  

可能重复:
  How to add a case-insensitive option to Array.IndexOf

int index1 = Array.IndexOf(myKeys, "foot");

示例我的数组列表中有FOOT,但它会返回index1 = -1的值。

如何通过忽略大小写找到foot的索引?

2 个答案:

答案 0 :(得分:17)

使用FindIndex和一点lambda。

var ar = new[] { "hi", "Hello" };
var ix = Array.FindIndex(ar, p => p.Equals("hello", StringComparison.CurrentCultureIgnoreCase));

答案 1 :(得分:1)

使用IComparer<string>类:

public class CaseInsensitiveComp: IComparer<string>
{    
    private CaseInsensitiveComparer _comp = new CaseInsensitiveComparer();
    public int Compare(string x, string y)
    {
        return _comp.Compare(x, y);
    }
}

然后在已排序数组上执行BinarySearch:

var myKeys = new List<string>(){"boot", "FOOT", "rOOt"};
IComparer<string> comp = new CaseInsensitiveComp();

myKeys.Sort(comp);

int theIndex = myKeys.BinarySearch("foot", comp);

通常对较大的阵列最有效,最好是静态的。