【发布时间】:2009-09-10 15:45:23
【问题描述】:
我正在寻找在 C# 中对二维数组进行切片。
我有 double[2,2] 价格并且想要检索该数组的第二行。我已经尝试过价格[1,],但我感觉它可能是别的东西。
提前致谢。
【问题讨论】:
我正在寻找在 C# 中对二维数组进行切片。
我有 double[2,2] 价格并且想要检索该数组的第二行。我已经尝试过价格[1,],但我感觉它可能是别的东西。
提前致谢。
【问题讨论】:
没有直接的“切片”操作,但你可以像这样定义一个扩展方法:
public static IEnumerable<T> SliceRow<T>(this T[,] array, int row)
{
for (var i = 0; i < array.GetLength(0); i++)
{
yield return array[i, row];
}
}
double[,] prices = ...;
double[] secondRow = prices.SliceRow(1).ToArray();
【讨论】:
this 在this T[,] array 中做了什么?
row 索引放在这里,因为我认为它应该是array[row,column] 吗?
Enumerable.Range(0, 2)
.Select(x => prices[1,x])
.ToArray();
【讨论】:
问题是如果你有一个锯齿状或多维数组...这里是如何从其中检索一个值:
int[,] rectArray = new int[3,3]
{
{0,1,2}
{3,4,5}
{6,7,8}
};
int i = rectArray[2,2]; // i will be 8
int[][] jaggedArray = new int[3][3]
{
{0,1,2}
{3,4,5}
{6,7,8}
};
int i = jaggedArray[2][2]; //i will be 8
编辑:添加以解决切片部分...
要从这些数组之一中获取一个 int 数组,您必须循环并检索您所追求的值。例如:
public IEnumerable<int> GetIntsFromArray(int[][] theArray) {
for(int i = 0; i<3; i++) {
yield return theArray[2][i]; // would return 6, 7 ,8
}
}
【讨论】: