我有一个基本的列表,看起来像这样:
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();发布于 2018-06-21 03:41:48
您可以尝试这样做:
for (int i = 0; i < gameData.Count(); i++)
{
gameData[i] = gameNames[i] + gameData[i].Substring(gameData[i].IndexOf(","));
}上面的gameDatai.IndexOf(“,")将找到第一个",”的位置,子字符串将提取第一个",“之后的内容。然后从gameNames列表中追加内容。
发布于 2018-06-21 03:31:03
我建议将前导逗号逻辑添加到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不是以comma+space开头,它就会保持值不变,否则会连接起来。
https://stackoverflow.com/questions/50955675
复制相似问题