【问题标题】:Removing items in Jagged array using index使用索引删除锯齿状数组中的项目
【发布时间】:2012-03-22 13:58:18
【问题描述】:

我想使用 indizes 删除 Jagged 数组的项目。

int[] toRemove; (e.g, {0, 1})

int[][] MainArray (e.g. { [0] {...}, [1] {...}, [2] {...}}

预期结果

int[][] result (e.g. {[2] {...}}

如何从 MainArray 中删除 toRemove 列表中具有索引的项目?

有没有使用 LINQ 的有效方法?

【问题讨论】:

  • Linq 是一种查询工具,它不会直接删除项目(尽管您可以查询子集并将其分配回原始集)
  • 你不能从一个数组中删除,你明白你会得到一个新数组吗?那还必须是一个数组吗?

标签: c# .net linq jagged-arrays


【解决方案1】:

希望这会产生预期的结果:

var notInToRemove = MainArray
    .Where((arr ,index) => !toRemove.Contains(index)).ToArray();

【讨论】:

  • 现在我知道为什么 Where 方法的 int Index 参数会过载 ;-)
  • 谢谢蒂姆。大力支持。按预期和我需要的那样工作。 LINQ 很优雅,但是学习很辛苦:-(。顺便说一下,我也在亚琛学习过。很高兴认识你。
  • @Suresh: ...我仍然在这里生活和工作,我很高兴听到它有效 :) LINQ 一开始很难,因为它压缩了复杂性,你经常需要横向思考。但结果几乎总是更容易理解。在脑海中找到正确结果的方法,然后开始编写查询,反之亦然。
【解决方案2】:

如果您想要的只是 toRemove 集中不存在的数据,则可以使用 ElementAt 方法而不是 Remove 方法。

int[] toRemove = {0,1};
int[][] mainArray = new int[3][];
mainArray[0] = new int[]{0,0,0};
mainArray[1] = new int[]{1,1,1};
mainArray[2] = new int[]{2,2,2};

var result = mainArray.ElementAt(2); // This value 2 is found as all indexes of mainArray except the values in toRemove
//(Code would look like this : 
Enumerable.Range(0, mainArray.Length).Except(toRemove);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多