【问题标题】:Two dimensional array slice in C#C#中的二维数组切片
【发布时间】:2009-09-10 15:45:23
【问题描述】:

我正在寻找在 C# 中对二维数组进行切片。

我有 double[2,2] 价格并且想要检索该数组的第二行。我已经尝试过价格[1,],但我感觉它可能是别的东西。

提前致谢。

【问题讨论】:

    标签: c# arrays


    【解决方案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();
    

    【讨论】:

    • thisthis T[,] array 中做了什么?
    • @Hamish Grubijan:它将静态方法变成了extension method
    • 你不会把row 索引放在这里,因为我认为它应该是array[row,column] 吗?
    【解决方案2】:
    Enumerable.Range(0, 2)
                    .Select(x => prices[1,x])
                    .ToArray();
    

    【讨论】:

      【解决方案3】:

      问题是如果你有一个锯齿状或多维数组...这里是如何从其中检索一个值:

       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  
        }
        }
      

      【讨论】:

      • OP 写道" "...想要检索第二行..." 在您的示例中,我认为 OP 想要 jaggedArray[2] 或包含 {6,7, 8}
      猜你喜欢
      • 2014-04-14
      • 1970-01-01
      • 2018-05-06
      • 2011-09-19
      • 1970-01-01
      • 2013-04-12
      • 2013-03-15
      相关资源
      最近更新 更多