C# 如何删除列表中的元素<;字符串>;与另一个列表相关<;字符串>;?

C# 如何删除列表中的元素<;字符串>;与另一个列表相关<;字符串>;?,c#,arrays,list,C#,Arrays,List,我有两个字符串列表: List<string> a; List<string> b; 列表a; 名单b; 使用a.RemoveAll()I删除列表a中的空元素或特定值 现在,我想删除列表b中与使用a.RemoveAll()删除的索引相关的同一索引中的元素。 我怎样才能做到这一点 我已经用为()编写了一个变通方法。。。循环,但代码看起来非常笨拙。应该有更好的解决办法让我试着重新表述你的问题。您希望删除b的某些索引处的元素。具体是哪些指标?如果调用a.RemoveAll(

我有两个字符串列表:

List<string> a;
List<string> b;
列表a;
名单b;
使用
a.RemoveAll()
I删除列表a中的空元素或特定值

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

我怎样才能做到这一点


我已经用
为()编写了一个变通方法。。。循环
,但代码看起来非常笨拙。应该有更好的解决办法

让我试着重新表述你的问题。您希望删除
b
的某些索引处的元素。具体是哪些指标?如果调用
a.RemoveAll(somePredicate)
,则会删除的
a
索引。我理解对了吗

  var myList = new List<string> { "A", "x", "x", "B" };
您可以使用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));

让我试着重新表述你的问题。您希望删除
b
的某些索引处的元素。具体是哪些指标?如果调用
a.RemoveAll(somePredicate)
,则会删除的
a
索引。我理解对了吗

您可以使用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));

您能提供示例输入和预期输出吗?此外,您的for循环将有助于查看,我们可以帮助您。事实上,您有两个列表正在像这样“并行”编辑,这可能表明您的代码中有一个糟糕的抽象;你能描述一下列表是什么,为什么有两个?一个更好的解决方案可能是使用一个包含字符串对的列表,而不是一对字符串列表。如果元素位于两个单独的列表中,则它们不“相关”。如果它们真的是“相关”的,用一个包含这两个的对象列一个列表,或者列一个元组列表,@IanMercer:我只差几秒钟就打败了你。:-)伟人所见略同?您能提供示例输入和预期输出吗?此外,您的for循环将有助于查看,我们可以帮助您。事实上,您有两个列表正在像这样“并行”编辑,这可能表明您的代码中有一个糟糕的抽象;你能描述一下列表是什么,为什么有两个?一个更好的解决方案可能是使用一个包含字符串对的列表,而不是一对字符串列表。如果元素位于两个单独的列表中,则它们不“相关”。如果它们真的是“相关”的,用一个包含这两个的对象列一个列表,或者列一个元组列表,@IanMercer:我只差几秒钟就打败了你。:-)英雄所见略同?我对林克没什么经验。。。显然是时候改变了。我对林克没有太多的经验。。。是时候改变这一点了。
var newList = b.Select((x, y) => (element: x, index: y))
    .Where(x => somePredicate(a[x.index])).ToList();