如何用另一个列表中的值附加到字符串列表中?

时间:2018-06-20 19:26:55

标签: c#

我有一个基本的列表,看起来像这样:

List<string> gameNames = new List<string>()
{
    "Zelda",
    "Mario",
    "Metroid",
    "Splatoon",
    "Xenoblade",
};

我还有另一个看起来像这样的列表:

List<string> gameData = new List<string>()
{
    ", Nintendo, Nintendo, 2017",
    "Mario, Nintendo, Nintendo, 2017",
    ", Nintendo, Nintendo, 2017",
    ", Nintendo, Nintendo, 2017",
    "Xenoblade, Nintendo, Monolith, 2017",
};

我要用相同的gameNames索引中的相应值替换gameData列表的第一个“”。

因此,第一个元素应类似于:

"Zelda, Nintendo, Nintendo, 2017"

现在,我正在使用一个Zip方法来追加数据,但是它不会检查值是否为',',无论如何它都只会追加。

这里是一个例子:

List<string> gameData= gameNames.Zip(gameData, (x, y) => x + "," + y).ToList();

2 个答案:

答案 0 :(得分:3)

我建议在lambda中添加前导逗号逻辑,并保留其他所有内容:

var merged = gameNames.Zip(gameData, (x, y) => x + (y.StartsWith(", ") ? String.Empty : ", ") + y).ToList();

因此,它在出现的地方使用前导逗号,在缺少的地方插入一个逗号。

在OP中澄清后的第二个版本:

var merged = gameNames.Zip(gameData, (x, y) => (y.StartsWith(", ") ? x + y : y)).ToList();

只要它不以逗号+空格开头,否则就会串联,从而保留gameNames的值。

答案 1 :(得分:1)

您可以尝试以下方法:

for (int i = 0; i < gameData.Count(); i++)
{
   gameData[i] = gameNames[i] + gameData[i].Substring(gameData[i].IndexOf(","));
}
上面的

gameData [i] .IndexOf(“,”)将找到第一个“,”的位置,并且Substring将提取第一个“,”之后的内容。然后附加游戏名称列表中的内容。