2015-05-04 139 views
1

上使用Array.IndexOf如果我有一个锯齿形阵列设置了这样的:既锯齿状排列

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

我怎么会得到多少的指标。所以如果我试图得到64,我会得到类似于0,1的东西,指示物品的索引。我尝试使用Array.IndexOf()方法,但我得到-1,因为它不是为锯齿形阵列构建的。输出格式并不重要。它可以是一个字符串,两个整数,一个字节数组,任何东西。

+0

嗨,请参考:http://stackoverflow.com/questions/3260935/finding-position-of-an-element-in-a-two-dimensional-array –

回答

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值或空数组,但这取决于你。

+1

你为什么要复制这个解决方案? http://stackoverflow.com/questions/3260935/finding-position-of-an-element-in-a-two-dimensional-array –

+0

我以为相同的帕维尔,但他提供的顶级解决方案是不同的。 – Frayt