使用c#确定在数组中出现多次的元素的所有索引

时间:2012-09-24 09:56:43

标签: c# string

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

3 个答案:

答案 0 :(得分:3)

int[] indexes = input.Select((item, index) => new { item, index })
                     .Where(x => x.item == "A")
                     .Select(x => x.index)
                     .ToArray();

答案 1 :(得分:0)

您可以使用Array

中的以下方法
public static int FindIndex<T>(
    T[] array,
    int startIndex,
    Predicate<T> match)

它从startIndex开始搜索数组,并以最后一个元素结束。

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

答案 2 :(得分: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));