在我的C#项目中,我需要Tile[ , ] make Tile[ ]在一行中迭代。
Tile[,] tiles = playfield.Tiles;
Tile[] center_row = Tile[row / 2]; // does not work我需要从Tile[ , ] make Tile[ ][ ]还是直接转换它?
更新
我的问题在https://stackoverflow.com/a/32903582/12416559答案的帮助下得到了解决
发布于 2021-05-11 13:12:17
您可以使用BlockCopy将所有数据从一种形式移动到另一种形式。
理论上
下面是作为扩展方法的解决方案
public static T[] MatrixToVector<T>(this T[,] matrix)
{
var size = Buffer.ByteLength(matrix);
var vector = new T[matrix.Length];
Buffer.BlockCopy(matrix, 0, vector, 0, size);
return vector;
}
public static T[,] VectorToMatrix<T>(this T[] vector, int rows, int columns)
{
var size = Buffer.ByteLength(vector);
var matrix = new T[rows,columns];
Buffer.BlockCopy(vector, 0, matrix, 0, size);
return matrix;
}在实践中
数组只能是原语类型。

扑向救援
StackOverflow到援救with a solution
public static T[] MatrixToVector<T>(this T[,] matrix)
{
var vector = matrix.Cast<T>().ToArray();
return vector;
}发布于 2021-05-11 13:01:31
你喜欢UnityEngine,我明白吗?:)
好的,您可以使用Buffer.BlockCopy方法,如解释的here
发布于 2021-05-11 13:07:58
如果迭代是您想要的,那么您可以从它获得IEnumerator,只需迭代:
int[,] res = new int[2, 2]
{
{1,2 },
{33,45 }
};
var enumerator = res.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}https://stackoverflow.com/questions/67487166
复制相似问题