在 for 循环中删除 JArray 的元素



我正在尝试在迭代JArray时删除JArray的无效元素。在 foreach 循环中执行此操作显然不起作用,因为它不希望数组变短。所以我决定使用 for 循环。我是这样做的:

// data is my JArray, its elements are JObjects
for (int i = 0; i < data.Count; i++)
{
    if (!data[i].HasValues) { // checking if element is empty
        data[i].Remove();
        i--;
    }
}

当我对此进行测试时,它工作正常。但我不确定它是否安全,或者我只是幸运。例如,我不确定删除一个元素后元素的顺序是否保持不变。还是有任何其他原因导致这不起作用?

我想最好的选择,如果这是不正确的,就是将所有有效元素复制到一个新数组中。但这会导致很多开销。

你可以以更好的方式手动完成此操作;当你找到一个想要删除的"有缺陷"的元素时,你只需将所有其他元素向左移动,从而覆盖你不想要的元素。但我认为你没有必要这样做。(如果您坚持此请求,请发表评论,我会为您提供这样做的代码)。

Remove()方法可以为您做到这一点。大多数从集合中插入或删除元素的方法都是这样工作的:它们在所需位置插入/删除元素,并将其他元素分别向右/向左移动。

相关内容

  • 没有找到相关文章

最新更新