在锯齿状数组上使用Array.IndexOf

时间:2015-05-04 10:49:51

标签: c# arrays indexing jagged-arrays

如果我有一个像这样的锯齿状阵列:

[0][0]{128}
[0][1]{512}
[1][0]{64}

我如何获得这两个数字的索引。因此,如果我尝试获取64,我会得到0,1之类的内容,表示项目的索引。我尝试使用Array.IndexOf()方法,但我得到-1,因为它不是为锯齿状数组构建的。输出格式并不重要。它可以是一个字符串,两个整数,一个字节数组,任何东西。

1 个答案:

答案 0 :(得分:2)

试试这个:

public static Tuple<int, int> IndexOf<T>(this T[][] jaggedArray, T value)
{
    for (int i = 0; i < jaggedArray.Length; i++)
    {
        T[] array = jaggedArray[i];
        for (int j = 0; j < array.Length; j++)
            if (array[j].Equals(value))
                return Tuple.Create(i, j);
    }
    return Tuple.Create(-1, -1);
}

您可以将其用作:

int[][] myArray = ...
Tupple<int, int> position = myArray.IndexOf(64);

或者对于矩阵:

public static Tuple<int, int> IndexOf<T>(this T[,] matrix, T value)
{
    int width = matrix.GetLength(0); 
    int height = matrix.GetLength(1); 

    for (int x = 0; x < width; ++x)
        for (int y = 0; y < height; ++y)
            if (matrix[x, y].Equals(value))
                return Tuple.Create(x, y);

    return Tuple.Create(-1, -1);
}

您可能仍希望检查NULL值或NULL数组,但这取决于您。