我有一个基本的列表,看起来像这样:
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();
答案 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将提取第一个“,”之后的内容。然后附加游戏名称列表中的内容。