如何在C#中查找字符数组中字符的索引

3
我希望能在char数组中找到字符的索引。我写了下面的代码,但是我想使用一些库函数或LINQ来查找索引,而不是手动遍历它。有没有更聪明/简洁的方法来实现这一点。 尝试:
    var index = -1;
    char[] x = { 'A', 'B', 'C', 'D' , 'E'};

    for(int t = 0; t< x.Length; t++)
    {
        if (x[t] == 'E')
            index = t;
    }

    Console.WriteLine($"Index is:  {index}");
3个回答

10

对于这个例子,你可以使用Array.IndexOf方法。

char[] x = { 'A', 'B', 'C', 'D', 'E' };

Console.WriteLine($"Index is:  {Array.IndexOf(x, 'E')}");

1

这是使用LINQ的代码:

char[] x = { 'A', 'B', 'C', 'D', 'E' };
var index = x.Select((c, i) => new {c, i}).SingleOrDefault(c => c.Equals('D')).i

使用数组类:
var index = Array.FindIndex(x, c=> c.Equals('E'));

在底层,它通过数组循环。我认为OP想要一个高效的算法来完成这个任务。 - Zack ISSOIR
2
@ZackISSOIR:这不像是一个索引数组。在普通数组中查找项的时间复杂度为O(n) - Robert Harvey
@ZackISSOIR:如果不通过循环遍历数组,你会如何找到它。正如Robert Harvey所指出的那样,任何有用的解决方案几乎都是一个O(n)问题。 - Flydog57
你是正确的@RobertHarvey :) - Zack ISSOIR

0
使用 System.Linq 的 FindIndex
char[] x = { 'A', 'B', 'C', 'D' , 'E'};
int index = x.ToList().FindIndex(c => c == 'E');

这需要你对集合进行两次枚举。 - Robert Harvey
这是一个解决方案,由于数组不是很大,所以不应该有问题 :) 当你有一个至少包含1000个元素的数组时,你才需要考虑性能问题 :) - Alen.Toma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接