如何从多维数组中获取维(切片)
我试图找出如何从多维数组中获取单个维度(为了论证,让我们说它是2D),我有一个多维数组:
double[,] d = new double[,] { { 1, 2, 3, 4, 5 }, { 5, 4, 3, 2, 1 } };
如果它是一个锯齿状的数组,我只需要调用d[0]
,这会给我一个{1, 2, 3, 4, 5}
的数组,有没有办法可以用2D数组实现相同的效果?
不,您当然可以编写一个表示切片的包装类,并在内部有一个索引器 – 但没有内置任何内容。 另一种方法是编写一个方法来制作切片的副本并交回一个向量 – 这取决于您是否需要副本 。
using System; static class ArraySliceExt { public static ArraySlice2D Slice (this T[,] arr, int firstDimension) { return new ArraySlice2D (arr, firstDimension); } } class ArraySlice2D { 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]); } } }
该答案的改进版本:
public static IEnumerable SliceRow (this T[,] array, int row) { for (var i = array.GetLowerBound(1); i <= array.GetUpperBound(1); i++) { yield return array[row, i]; } } public static IEnumerable SliceColumn (this T[,] array, int column) { for (var i = array.GetLowerBound(0); i <= array.GetUpperBound(0); i++) { yield return array[i, column]; } }
矩形arrays不是为此目的而构建的。 如果您需要这种类型的function,则应切换到锯齿状arrays。 编写一个将矩形数组转换为锯齿状数组的函数非常简单。
您还可以通过在适当的维度上调用GetLength(int dimension)来简单地重建该数组,然后正确地索引它以检索每个值。 它比转换整个arrays便宜,但最便宜的选择是将其更改为使用锯齿状arrays。
上述就是C#学习教程:如何从多维数组中获取维(切片)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1030683.html