我有以下锯齿状数组
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}
};
答案 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会更好。