在锯齿状数组上使用 Array.IndexOf
Using Array.IndexOf on jagged array
如果我有一个像这样设置的锯齿状数组:
[0][0]{128}
[0][1]{512}
[1][0]{64}
我如何获得数字的两个索引。因此,如果我尝试获取 64
,我会得到类似 0,1
的内容,指示该项目的索引。我尝试使用 Array.IndexOf()
方法但我得到 -1
因为它不是为锯齿状数组构建的。输出格式并不重要。它可以是一个字符串,两个整数,一个字节数组,任何东西。
试试这个:
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 数组,但这取决于您。
如果我有一个像这样设置的锯齿状数组:
[0][0]{128}
[0][1]{512}
[1][0]{64}
我如何获得数字的两个索引。因此,如果我尝试获取 64
,我会得到类似 0,1
的内容,指示该项目的索引。我尝试使用 Array.IndexOf()
方法但我得到 -1
因为它不是为锯齿状数组构建的。输出格式并不重要。它可以是一个字符串,两个整数,一个字节数组,任何东西。
试试这个:
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 数组,但这取决于您。