在 C# 中将分隔字符串转换为字典<string,string>

Posted

技术标签:

【中文标题】在 C# 中将分隔字符串转换为字典<string,string>【英文标题】:Convert a delimted string to a dictionary<string,string> in C# 【发布时间】:2011-05-07 16:09:29 【问题描述】:

我有一个格式的字符串 "key1=value1;key2=value2;key3=value3;"

我需要将它转换为上述键值对的字典。

解决此问题的最佳方法是什么? 谢谢。

【问题讨论】:

这基本上是这个问题的重复:***.com/questions/776107/… 我想你必须先用&amp; 替换你的;,然后才能工作。 Convert a delimited string to a dictionary<string,uint> in C#的可能重复 【参考方案1】:

您可以使用 JSON 字符串来执行此操作,例如:

var dic = JsonConvert.DeserializeObject<Dictionary<int, string>>("'1':'One','2':'Two','3':'Three'");

【讨论】:

[最佳解决方案]。我更喜欢 json 格式的值,而不仅仅是随机文本。谢谢【参考方案2】:

看看令人敬畏的空格忽略,纠正最后一个值是否具有正则表达式的分号功能:

        var dict = Regex.Matches("key1 = value1; key2 = value2 ; key3 = value3", @"\s*(.*?)\s*=\s*(.*?)\s*(;|$)")
        .OfType<Match>()
        .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value);

但说真的,Ani 应该得到 .ToDictionary() 的支持。我永远不会想到这一点。

【讨论】:

【参考方案3】:

这样的?

var dict = text.Split(new[] ';', StringSplitOptions.RemoveEmptyEntries)
               .Select(part => part.Split('='))
               .ToDictionary(split => split[0], split => split[1]);

当然,如果不满足假设,这将失败。例如,如果文本格式不正确,可能会抛出 IndexOutOfRangeException,如果存在重复键,则会抛出 ArgumentException。这些场景中的每一个都需要不同的修改。如果可能存在多余的空白,您可能需要根据需要调用一些 string.Trim

【讨论】:

这对某些人来说可能很明显,但您需要将System.Linq 包含在Select() 中。【参考方案4】:

更新了 Ani 以考虑末尾的分号。 where 子句将确保您在创建和进入之前拥有一个键和值。

var dictionary = "key1=value1;key2=value2;key3=value3;"
    .Split(';')
    .Select (part  => part.Split('='))
    .Where (part => part.Length == 2)
    .ToDictionary (sp => sp[0], sp => sp[1]);

【讨论】:

【参考方案5】:

你可以这样写,也可以自己循环。无论哪种方式。最终,您将拆分 ; 以获取项目对,然后拆分 = 以获取键和值。

string input = "key1=value1;key2=value2;key3=value3;";
Dictionary<string, string> dictionary =
    input.TrimEnd(';').Split(';').ToDictionary(item => item.Split('=')[0], item => item.Split('=')[1]);

循环版本:

Dictionary<string, string> dictionary = new Dictionary<string, string>();
string[] items = input.TrimEnd(';').Split(';');
foreach (string item in items)

    string[] keyValue = item.Split('=');
    dictionary.Add(keyValue[0], keyValue[1]);

【讨论】:

以上是关于在 C# 中将分隔字符串转换为字典<string,string>的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中将分号分隔的字符串拆分为字典

在 C# 中将匿名类型转换为键/值数组?

将表转换为像字典一样的 json 对象 SQL?

在 C# 中枚举到字典

在 C# 中将字符串转换为比较操作

如何在 C# 中将 IEnumerable<T> 转换为 List<T>?