Sli*_*SFT 19 c# linq aggregate .net-4.0
如何将键值对的字典转换为单个字符串?你能用LINQ聚合做到这一点吗?我已经看到使用字符串列表执行此操作的示例,但不是字典.
输入:
Dictionary<string, string> map = new Dictionary<string, string> {
{"A", "Alpha"},
{"B", "Beta"},
{"G", "Gamma"}
};
Run Code Online (Sandbox Code Playgroud)
输出:
string result = "A:Alpha, B:Beta, G:Gamma";
Run Code Online (Sandbox Code Playgroud)
Cᴏʀ*_*ᴏʀʏ 46
这是我能想到的最简洁的方式:
var result = string.Join(", ", map.Select(m => m.Key + ":" + m.Value).ToArray());
Run Code Online (Sandbox Code Playgroud)
如果您使用的是.NET 4+,则可以删除.ToArray()
:
var result = string.Join(", ", map.Select(m => m.Key + ":" + m.Value));
Run Code Online (Sandbox Code Playgroud)
如果您能够使用新的字符串插值语言功能:
var result = string.Join(", ", map.Select(m => $"{m.Key}:{m.Value}"));
Run Code Online (Sandbox Code Playgroud)
但是,根据您的具体情况,这可能会更快(虽然不是很优雅):
var result = map.Aggregate(new StringBuilder(),
(a, b) => a.Append(", ").Append(b.Key).Append(":").Append(b.Value),
(a) => a.Remove(0, 2).ToString());
Run Code Online (Sandbox Code Playgroud)
我在你的三项词典上和我的笔记本电脑上运行了上述各项迭代次数(10,000; 1,000,000; 10,000,000),后者的平均速度提高了39%.在包含10个元素的字典中,后者仅快了约22%.
还有一点需要注意,我的第一个例子中的简单字符串连接比mccow002的答案string.Format()
变化快了大约38%,因为我怀疑它在一个小的字符串构建器中代替串联,假设几乎相同的性能指标.
要从结果字符串重新创建原始字典,您可以执行以下操作:
var map = result.Split(',')
.Select(p => p.Trim().Split(':'))
.ToDictionary(p => p[0], p => p[1]);
Run Code Online (Sandbox Code Playgroud)
string result = string.Join(", ", map.Select(x => string.Format("{0}:{1}", x.Key, x.Value)).ToArray())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19334 次 |
最近记录: |