首页 > 解决方案 > 如何删除列表的元素与另一个列表相关?

问题描述

我有两个字符串列表:

List<string> a;
List<string> b;

随着a.RemoveAll()我删除列表 a 中的空元素或特定值。

现在我想删除列表 b 中与删除的索引相关的同一索引处的元素a.RemoveAll()

我怎样才能做到这一点?

我已经编写了一个解决方法,for ()... loops但代码看起来很尴尬。应该有更好的解决方案

标签: c#arrayslist

解决方案


让我试着改写你的问题。您想删除 的某些索引处的元素b。究竟是哪些指数?如果被调用,那些索引a将被删除。a.RemoveAll(somePredicate)我理解正确吗?

您可以使用 LINQ:

a.Select((x, y) => (element: x, index: y))
    .Where(x => somePredicate(x.element) && x.index < b.Count)
    .OrderByDescending(x => x.index)
    .ToList().ForEach(x => b.RemoveAt(x.index));

如果您不介意创建一个新列表,它可以更短:

var newList = b.Select((x, y) => (element: x, index: y))
    .Where(x => somePredicate(a[x.index])).ToList();

推荐阅读