使用linq解析样式属性集合

gee*_*ubb 2 .net c# linq collections projection

我想解析一个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]);
 }
Run Code Online (Sandbox Code Playgroud)

预期产量:

fill #e2b126 
stroke #010101 
stroke-width 0.3177 
stroke-miterlimit 10
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 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]);
Run Code Online (Sandbox Code Playgroud)

分解

第一个Split调用将返回一个String值数组,其中每个条目都是key:value格式.以下Select调用将每个条目转换为string[]第一个元素是键,第二个元素是值.该ToDictionary调用只是明确地执行此映射