将值合并到单个列表中
本文关键字:列表 单个 合并 | 更新日期: 2023-09-27 18:28:32
我有一个带有冒号分隔值的简单List<string>
。
但是,有些值在冒号前可能相同,但在冒号后可能不同。我需要根据最后一个最大值合并这两个值。
示例
name:john
surname:michael
gender:boy
name:pete
title:captain
将成为
surname:michael
gender:boy
name:pete
title:captain
list = list.GroupBy(s => s.Split(':')[0].ToLower())
.Select(g => g.Last())
.ToList();
一般来说:使用字典-->您使用的是List作为字典。
我更喜欢LazyDictionarys,你可以在不检查密钥存在的情况下更新,但对于伪代码中的标准.Net Dict
dict = new Dictionary()
for each item in your_LIST
{
tmp = item.Split(':')
if dict.ContainsKey(tmp[0])
{
dict[tmp[0]] = tmp[1]
}
else
{
dict.Add(tmp[0],tmp[1])
}
}
如果你有一本字典,这就是你想要的,如果你真的想把它转换回列表,那就好了,但实际上你可能希望它是一本字典
使用linq 可以是锥形
private string[] inputs = new string[]
{
"name:john",
"surname:michael",
"gender:boy",
"name:pete",
"title:captain",
};
private string[] expected = new string[]
{
"surname:michael",
"gender:boy",
"name:pete",
"title:captain",
};
private static List<string> FilterList(IEnumerable<string> src) {
return src.Select(s =>
{
var pieces = s.Split(':');
return new {Name = pieces[0], Value = pieces[1]};
}).GroupBy(m => m.Name)
.Select(g => String.Format("{0}:{1}", g.Key, g.Last().Value)).ToList();;
}
[TestMethod]
public void TestFilter() {
var actual = FilterList(inputs);
CollectionAssert.AreEquivalent(expected, actual);
}