1

调用Array.indexOf(input Array,"A")给出了输入数组中“A”的索引。但是如果“A”在输入数组中出现多次,如何使用类似的函数获取数组中“A”的所有索引。

4

3 回答 3

3
int[] indexes = input.Select((item, index) => new { item, index })
                     .Where(x => x.item == "A")
                     .Select(x => x.index)
                     .ToArray();
于 2012-09-24T10:00:36.880 回答
0

Array您可以在课堂上使用以下方法

public static int FindIndex<T>(
    T[] array,
    int startIndex,
    Predicate<T> match)

它搜索从 startIndex 开始到最后一个元素结束的数组。

但是,它应该在循环中使用,并且在每次下一次迭代中startIndex都会被分配一个 value = previousIndexFound + 1。当然,如果这小于数组的长度。

于 2012-09-24T10:03:42.490 回答
0

Array您可以像这样为类编写扩展方法:

public static List<Int32> IndicesOf<T>(this T[] array, T value)
{
    var indices = new List<Int32>();

    Int32 startIndex = 0;
    while (true)
    {
        startIndex = Array.IndexOf<T>(array, value, startIndex);
        if (startIndex != -1)
        {
            indices.Add(startIndex);
            startIndex++;
        }
        else
        {
            break;
        }
    }

    return indices;
}

使用示例:

    var symbols = new Char[] { 'a', 'b', 'c', 'a' };
    var indices = symbols.IndicesOf('a');
    indices.ForEach(index => Console.WriteLine(index));
于 2012-09-24T10:16:24.127 回答