转换Dictionary转换成单个聚合字符串表示形式

本文关键字:转换 string 字符串 表示 Dictionary 单个聚 | 更新日期: 2023-09-27 18:13:19

如何将键值对的字典转换为单个字符串?您可以使用LINQ聚合来做到这一点吗?我已经看到了使用字符串列表的示例,但没有使用字典。

输入:

Dictionary<string, string> map = new Dictionary<string, string> { 
          {"A", "Alpha"},  
          {"B", "Beta"}, 
          {"G", "Gamma"}
};
输出:

  string result = "A:Alpha, B:Beta, G:Gamma";

转换Dictionary<string, string>转换成单个聚合字符串表示形式

这是我能想到的最简洁的方式:

var result = string.Join(", ", map.Select(m => m.Key + ":" + m.Value).ToArray());

如果你使用的是。net 4+,你可以去掉.ToArray():

var result = string.Join(", ", map.Select(m => m.Key + ":" + m.Value));

如果你能够使用新的字符串插值语言特性:

var result = string.Join(", ", map.Select(m => $"{m.Key}:{m.Value}"));

但是,根据您的情况,这可能更快(尽管不是很优雅):

var result = map.Aggregate(new StringBuilder(),
    (a, b) => a.Append(", ").Append(b.Key).Append(":").Append(b.Value),
    (a) => a.Remove(0, 2).ToString());

我以不同的迭代次数(10,000;1000000;在你的三项词典和我的笔记本电脑上,后者平均快39%。对于一个有10个元素的字典,后者只快了22%。

另一件需要注意的事情是,在我的第一个例子中,简单的字符串连接比mccow002答案中的string.Format()变化快38%,因为我怀疑它在几乎相同的性能指标下抛出了一个小字符串构建器来代替连接。

要从结果字符串重新创建原始字典,您可以这样做:

var map = result.Split(',')
    .Select(p => p.Trim().Split(':'))
    .ToDictionary(p => p[0], p => p[1]);
string result = string.Join(", ", map.Select(x => string.Format("{0}:{1}", x.Key, x.Value)).ToArray())

使用LINQ聚合方法:

map
.Select(m => $"{m.Key}:{m.Value}")
.Aggregate((m1, m2) => $"{m1}, {m2}");

string.Format():

相同
map
.Select(m => string.Format("{0}:{1}", m.Key, m.Value))
.Aggregate((m1, m2) => string.Format("{0}, {1}", m1, m2))
相关文章: