如何保留一些锯齿状数组的列和行,并删除c#

时间:2015-04-26 09:35:26

标签: c# arrays

我有以下锯齿状数组

int[][] dists1 = new int[][]
            {
               new int[]{0,2,3,5,2,4},
               new int[]{2,0,1,3,5,3},
               new int[]{3,1,0,4,4,3},
               new int[]{5,3,4,0,2,4},
               new int[]{2,5,4,2,0,2},
               new int[]{4,3,3,4,2,0}
            };

我学会了如何删除一个特定的列和行(例如3)。这是a link

现在我希望动态编程如下: 考虑这个数组

     int[] day={1,4,5};

这个数组可以是另一个数组(我因此使用了动态术语

其中数组“day”的元素显示“dists1”矩阵的行和列,所以我希望名为“dists2”的新锯齿数组只包含1,4,5 的行和行的列和行列“0”,因为它是固定的行和列,如下所示:

  int[][] dists2 = new int[][]
            {
               new int[]{0,2,2,4},
               new int[]{2,0,5,3},
               new int[]{2,5,0,2},
               new int[]{4,3,2,0}
            };                                                                                                    

1 个答案:

答案 0 :(得分:2)

只需修改that answer并用日期数组的Contains方法替换i!= 2条件:

int[] day = {1,4,5};
int[][] finalDists = 
        dists.Where((arr, i) => i == 0 || day.Contains(i)) //skip rows
       .Select(arr=> arr.Where((item, i) => i == 0 || day.Contains(i)) //skip cols
       .ToArray())
       .ToArray();

无论如何,如果性能很重要,那么使用for循环而不是LINQ会更好。