我有一个简单List<string>
的冒号分隔值。
但是,有些值在冒号之前可能相同,但在冒号之后可能不同。我需要根据最后一个最大值合并这两个值。
例子
name:john
surname:michael
gender:boy
name:pete
title:captain
会成为
surname:michael
gender:boy
name:pete
title:captain
我有一个简单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();
它可以是使用 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);
}
一般来说:使用字典->您正在使用列表作为字典。
我更喜欢 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])
}
}
并且您有一本字典,这就是您想要的,如果您真的想将其转换回列表,那很好,但实际上您可能希望这是一本“一直向下”的字典