【问题标题】:How to remove a List string element if it contains a string element from another List?如果列表字符串元素包含另一个列表中的字符串元素,如何删除它?
【发布时间】:2013-04-22 00:54:50
【问题描述】:

设置

我有这三个列表。

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,并删除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。
  • @AlexeiLevenkov 我不知道任何 XML API,但事后看来,它们似乎很明显会存在。谢谢,我会调查的。
  • 起点 - 搜索C# XDocument - MSDN上有很多例子,这个网站上有很多问题。
  • @AlexeiLevenkov 之前的简短搜索指出我只加载一个 XML,但这些关键字给了我更多。特别是,获取标签之间的信息。就我而言,&lt;set&gt; 标记和其他更简单的方法可以从我的 XML 文件中提取更多信息之间的任何内容。在尝试笨拙的方法之前,我真的应该寻找(并研究)API。再次感谢这次的指导。

标签: c# xml linq


【解决方案1】:
foreach (var token in tokens)
{
    token.RemoveAll(str => sets.Any(s => str.Contains(s)));
}

【讨论】:

  • 那行得通。谢谢你。将在时间限制结束时标记为答案。
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多