【问题标题】:how to delete one column and row from jagged array in c#如何从c#中的锯齿状数组中删除一列和一行
【发布时间】:2015-04-19 10:19:43
【问题描述】:

我有以下锯齿状的“dists”数组

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

现在,当我从 dists 的原始数组中删除第 3 行和第 3 列时,我想创建另一个名为 finalDists 的锯齿状数组。我的意思是我希望最终有以下锯齿状数组:

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

我很困惑如何处理这个问题,在此之前感谢您的帮助

【问题讨论】:

  • 考虑使用现有的数学和矩阵解决方案。无需重新发明轮子,假设这是一个应用了矩阵逻辑的矩阵。

标签: c#


【解决方案1】:
int[][] finalDists = dists.Where((arr, i)=>i!=2) //skip row#3
                          .Select(arr=>arr.Where((item,i)=>i!=2) //skip col#3
                                          .ToArray())
                          .ToArray();

【讨论】:

  • 我错了,现在您提出的解决方案有效。 :) 非常感谢您的恐吓反应。
  • 我是 Stackoverflow 的新手,我不知道如何接受和投票 :)
  • 你能帮忙解决这个问题吗:[link] (stackoverflow.com/questions/29875959/…) 谢谢
【解决方案2】:

不是很优化,但是:

public static T[] RemoveRow<T>(T[] array, int row)
{
    T[] array2 = new T[array.Length - 1];

    Array.Copy(array, 0, array2, 0, row);
    Array.Copy(array, row + 1, array2, row, array2.Length - row);

    return array2;
}

public static T[][] RemoveColumn<T>(T[][] array, int column)
{
    T[][] array2 = new T[array.Length][];

    for (int i = 0; i < array.Length; i++)
    {
        array2[i] = RemoveRow(array[i], column);
    }

    return array2;
}

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

int[][] dists2 = RemoveColumn(RemoveRow(dists, 2), 2);

注意你要删除第三行和第三列,但是它们的索引是2,因为.NET数组是0 - 基于索引!

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2020-02-02
    • 2015-10-18
    • 2011-06-10
    相关资源
    最近更新 更多