我想解析一个SVG样式属性,它只是一个分隔的字符串,例如
“填充:#e2b126;行程:#010101;笔划宽度:0.3177;卒中miterLimit分别:10”
进入Dictionary<string,string>
,以便我可以对其执行一些处理。
这就是我所拥有的,它完成了这项工作,但我想使用linq投影使其更整洁,似乎无法获得语法。我尝试使用.Select()。ToDictionary等,但没有快乐。感谢:
string attributes = "fill:#e2b126;stroke:#010101;stroke-width:0.3177;stroke-miterlimit:10";
var pairs = attributes.Split(';').ToList();
var dic = new Dictionary<string, string>();
pairs.ForEach(p =>
{
var pair = p.Split(':');
dic.Add(pair[0], pair[1]);
});
foreach (var k in dic.Keys)
{
Console.WriteLine(k + " " + dic[k]);
}
预期产出:
fill #e2b126
stroke #010101
stroke-width 0.3177
stroke-miterlimit 10
答案 0 :(得分:5)
尝试以下
string attributes = "fill:#e2b126;stroke:#010101;stroke-width:0.3177;stroke-miterlimit:10";
var map = attributes
.Split(new []{';'}, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split(new []{':'}, StringSplitOptions.RemoveEmptyEntries))
.ToDictionary(p => p[0], p => p[1]);
击穿
第一个Split
调用将返回一个String
值数组,其中每个条目都采用key:value
格式。以下Select
调用会将每个条目转换为string[]
,其中第一个元素是键,第二个元素是值。 ToDictionary
调用只是明确执行此映射