如何从一个列表中删除包含另一个列表中的字符串元素的元素?

5

设置

我有这三个列表。

List<List<string>> tokens = new List<string>();
List<string> token = new List<string>();
List<string> sets = new List<string();

以下是完整的token列表,该列表将包含在tokens列表中。

{"<card>"",
 "    <name>Domri Emblem</name>",
 "    <set picURL="http://magiccards.info/extras/token/Gatecrash/Domri-Rade-Emblem.jpg" picURLHq="" picURLSt="">GTC</set>",
 "    <color></color>",
 "    <manacost></manacost>",
 "    <type>Emblem</type>",
 "    <pt></pt>",
 "    <tablerow>0</tablerow>",
 "    <text></text>",
 "    <token>1</token>",
 "</card>"}
sets列表会像这样。
{"ARB", ..., "AVR", ..., "GTC", ..., "ZEN"}

我希望能够遍历tokens中的每个token,并删除token中包含任何set中元素的字符串。

示例

tokens列表有一些token元素。其中一个token(假设是token1)有一个如下的元素。

{..., "    <set picURL="http://magiccards.info/extras/token/Gatecrash/Domri-Rade-Emblem.jpg" picURLHq="" picURLSt="">GTC</set>", ...}

另一个 token (比如 token2)具有以下两个元素。

{..., "    <set picURL="http://magiccards.info/extras/token/magic-2012/pentavite.jpg" picURLHq="" picURLSt="">M12</set>",
"    <set picURL="http://magiccards.info/extras/token/player-rewards-2004/pentavite.jpg" picURLHq="" picURLSt="">MI</set>", ...}

假设sets列表被修改为只包含{"ARB", "GTC", "M12"}

我该如何遍历tokens中的每个token,并移除包含在sets中任意一个字符串元素的字符串元素?因此,在这个过程之后,token1将不再具有上述元素,而token2只会保留第二个元素?

我已经尝试过的方法

以下代码遍历tokens中的每个token,并删除包含字符串"GTC"的任何元素。

foreach (var token in tokens)
{
    token.RemoveAll(str => str.Contains("GTC"));
}

我查看了一些其他的问题,发现了这个答案,但它并没有解决问题。

foreach (var token in tokens)
{
    token.RemoveAll(sets.Contains);
}

感谢您的帮助。

附注:你的示例看起来像XML...如果确实是XML,请考虑使用XML API。 - Alexei Levenkov
@AlexeiLevenkov,我之前不知道有任何XML API,但现在看来很明显它们是存在的。谢谢,我会去研究一下。 - KrimCard
起点 - 搜索C# XDocument - MSDN上有很多例子,这个网站上也有很多问题。 - Alexei Levenkov
@AlexeiLevenkov,早先的一次搜索只告诉我如何加载XML文件,但是这些关键词让我得到了更多信息。特别是如何获取在标签之间找到的信息。对于我的情况来说,就是<set>标签之间的任何东西,以及从XML文件中提取更多信息的简单方法。在尝试不可控的方式之前,我应该寻找和研究API。再次感谢您的指导。 - KrimCard
1个回答

5
foreach (var token in tokens)
{
    token.RemoveAll(str => sets.Any(s => str.Contains(s)));
}

可以的。谢谢。时间限制结束后会标记为答案。 - KrimCard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接