【问题标题】:Convert a delimited string to a List of KeyValuePair<string,string> in C#将分隔字符串转换为 C# 中的 KeyValuePair<string,string> 列表
【发布时间】:2020-01-13 16:54:01
【问题描述】:

我的问题与Convert a delimted string to a dictionary<string,string> in C# 非常相似,除了Dictionary&lt;String, String&gt; 之外,我想要List&lt;KeyValuePair&lt;String, String&gt;&gt;(在我的情况下,这些键值对的顺序很重要)

所以,重新表述我的问题:

我有一个格式如下的字符串"key1=value1;key2=value2;key3=value3"。对于上述键值对,我需要将其转换为List&lt;KeyValuePair&lt;String, String&gt;&gt;

我可以在不使用 LINQ 的情况下做到这一点,但是这可以使用 LINQ 来完成吗?以及如何?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    你必须做一些棘手的事情来分割你的字符串。基本上,您需要按主分隔符 (';') 进行拆分,因此您最终会得到:key1=value1key2=value2key3=value3。然后,您通过辅助分隔符 ('=') 拆分每个。 Select 将其转换为新的键值对字符串。它应该看起来像这样:

    var str = "key1=value1;key2=value2;key3=value3";
    
    List<KeyValuePair<string, string>> kvp = str.Split(';')
                                                .Select(x => new KeyValuePair<string, string>
                                                          (x.Split('=')[0], x.Split('=')[1]))
                                                .ToList();
    

    编辑:

    根据Joel Lucsy 的评论建议,您可以将选择更改为仅拆分一次:

    .Select(x => { var p = s.Split('='); return new KeyValuePair<string,string>(p[0],p[1]); })
    

    【讨论】:

    • 你也可以只用 .Select( x => { var p = s.Split('='); return new KeyValuePair(p[0], p[1]); })
    • @JoelLucsy 不知道在选择中初始化该临时变量。这很酷,并且避免了两次分裂。很棒的评论!
    【解决方案2】:

    尝试用分号分割,然后用等号分割每一项

    "key1=value1;key2=value2;key3=value3"
    .Split(';')
    .Select(x=>{
       var items=x.Split('=');
       return new KeyValuePair<string,string>(items[0],items[1]);
       })
     .ToList()
    

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      相关资源
      最近更新 更多