我试图找出如何从一个多维数组得到一个单一的维度(为了便于讨论,让我们说这是2D),我有一个多维数组:
I'm trying to figure out how to get a single dimension from a multidimensional array (for the sake of argument, let's say it's 2D), I have a multidimensional array:
double[,] d = new double[,] { { 1, 2, 3, 4, 5 }, { 5, 4, 3, 2, 1 } };
如果这是一个交错数组,我只想叫 D [0]
那会给我 {1,2阵列, 3,4,5}
,是有办法,我可以实现同一个二维数组?
If it was a jagged array, I would simply call d[0]
and that would give me an array of {1, 2, 3, 4, 5}
, is there a way I can achieve the same with a 2D array?
没有。当然,你可以写一个包装类,再presents片,并具有内部索引器 - 但没有内置。另一种方法是编写一个方法,使一个切片,双手背矢量的复制 - 这取决于你是否想要一个的复制的或不
No. You could of course write a wrapper class that represents a slice, and has an indexer internally - but nothing inbuilt. The other approach would be to write a method that makes a copy of a slice and hands back a vector - it depends whether you want a copy or not.
using System;
static class ArraySliceExt
{
public static ArraySlice2D<T> Slice<T>(this T[,] arr, int firstDimension)
{
return new ArraySlice2D<T>(arr, firstDimension);
}
}
class ArraySlice2D<T>
{
private readonly T[,] arr;
private readonly int firstDimension;
private readonly int length;
public int Length { get { return length; } }
public ArraySlice2D(T[,] arr, int firstDimension)
{
this.arr = arr;
this.firstDimension = firstDimension;
this.length = arr.GetUpperBound(1) + 1;
}
public T this[int index]
{
get { return arr[firstDimension, index]; }
set { arr[firstDimension, index] = value; }
}
}
public static class Program
{
static void Main()
{
double[,] d = new double[,] { { 1, 2, 3, 4, 5 }, { 5, 4, 3, 2, 1 } };
var slice = d.Slice(0);
for (int i = 0; i < slice.Length; i++)
{
Console.WriteLine(slice[i]);
}
}
}