c# - 如何删除列表的元素与另一个列表相关?
问题描述
我有两个字符串列表:
List<string> a;
List<string> b;
随着a.RemoveAll()
我删除列表 a 中的空元素或特定值。
现在我想删除列表 b 中与删除的索引相关的同一索引处的元素a.RemoveAll()
我怎样才能做到这一点?
我已经编写了一个解决方法,for ()... loops
但代码看起来很尴尬。应该有更好的解决方案
解决方案
让我试着改写你的问题。您想删除 的某些索引处的元素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();