【问题标题】:C# split, return key/value pairs in an arrayC#拆分,返回数组中的键/值对
【发布时间】:2011-02-13 02:43:06
【问题描述】:

我是 C# 新手,因此正在寻找外行的术语。本质上,我想做的是转:

key1=val1|key2=val2|...|keyN=valN

进入一个数据库数组,你猜对了,key1 返回 val1,key2 返回 val2,等等。我知道我可以使用 split 返回一个字符串,但从那时起,我就不知所措了。任何帮助将不胜感激!我希望我已经表达了我的意图,但是如果您有任何问题,请不要犹豫!

【问题讨论】:

  • @Mark Byers:我假设他的意思是像字典一样的“关联数组”。

标签: c# database split


【解决方案1】:
string s = "key1=val1|key2=val2|keyN=valN";
var dict = s.Split('|')
            .Select(x => x.Split('='))
            .ToDictionary(x => x[0], x => x[1]);

现在 dict 是带有所需键/值对的 Dictionary<string, string>

【讨论】:

  • 这对我帮助很大。正如我所说,我是 C# 的新手,并且正在开发我的第一个程序作为我已经使用的程序的附加组件(或多或少)。谢谢!
  • 闭包的使用真是太棒了,太好了!
  • 添加了异常处理。字符串 s = "key1=val1|key2=val2|keyN=valN"; var dict = s.Split('|') .Select(x => x.Split('=')) .Where(x => x.Length > 1 && !String.IsNullOrEmpty(x[0].Trim( )) && !String.IsNullOrEmpty(x[1].Trim())) .ToDictionary(x => x[0].Trim(), x => x[1].Trim());
【解决方案2】:
Dictionary<string,string> results = new Dictionary<string,string>();
foreach(string kvp in source.split('|'))
{
    results.Add(kvp.split('=')[0], kvp.split('=')[1]);
}

可能是 Linq 的一种做法。

【讨论】:

    【解决方案3】:
     string s = "key1=val1|key2=val2|keyN=valN";
     var dict = s.Split('|')
     .Select(x => x.Split('='))
     .Where(x => x.Length > 1 && !String.IsNullOrEmpty(x[0].Trim())
      && !String.IsNullOrEmpty(x[1].Trim()))
     .ToDictionary(x => x[0].Trim(), x => x[1].Trim());
    

    【讨论】:

    • 这很漂亮;知道如何转换它以处理重复值吗?即如果发现重复,则保留最新值。
    • 试试这个变量values = (item.Split(',') .Select(p =&gt; new { p, splittedP = p.Split('=') }) .Select(p =&gt; new KeyValuePair&lt;string, string&gt;(p.splittedP[0], p.splittedP[1]))) .ToList();
    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 2021-12-16
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    相关资源
    最近更新 更多