【问题标题】:split strings and assign them to dictionary拆分字符串并将它们分配给字典
【发布时间】:2014-09-24 10:34:08
【问题描述】:

我有一个包含许多行的文本文件,如下所示:

鲜花{郁金香|太阳花|玫瑰}

性别{女|男}

宠物{猫|狗|兔子}

我知道如何从文件中读取行,但是之后将类别及其子项拆分并存储在字典中的最佳方法是什么?假设从一个包含上述所有行的字符串数组?

【问题讨论】:

  • 你想从输出中得到什么?一个 key 和一些 value?
  • 我想将类别(例如鲜花)添加为列表视图中的项目,当我选择类别时,我想在第二个列表视图中显示子类别(郁金香、向日葵、玫瑰)。但是知道如何正确拆分并放入字典会很有帮助。
  • 是“|”可能值的占位符还是文件中的实际字符?
  • 是的,它们是真实的角色。我用它们作为分隔符。

标签: c# string dictionary split


【解决方案1】:

使用正则表达式的想法是正确的,但我更喜欢使用命名捕获以提高可读性

var regexp = new Regex(@"(?<category>\w+?)\{(?<entities>.*?)\}");
var d = new Dictionary<string, List<string>>();

// you would replace this list with the lines read from the file
var list = new string[] {"Flowers{Tulip|Sun Flower|Rose}"
                         , " Gender{Female|Male}"
                         , "Pets{Cat|Dog|Rabbit}"};

foreach (var entry in list)
{
    var mc = regexp.Matches(entry);
    foreach (Match m in mc)
    {
        d.Add(m.Groups["category"].Value
            , m.Groups["entities"].Value.Split('|').ToList());
    }
}

你会得到一个以类别为键的字典,以及字符串列表中的值

【讨论】:

  • 谢谢,这正是我需要的!
【解决方案2】:

您可以在此代码上使用Keyvalue

string T = @"Flowers{Tulip|Sun Flower|Rose}

Gender{Female|Male}

Pets{Cat|Dog|Rabbit}";

foreach (var line in T.Split('\n'))//or while(!file.EndOfFile)
{
    var S = line.Split(new char[] { '{', '|','}' }, StringSplitOptions.RemoveEmptyEntries);
    string Key = S[0];
    MessageBox.Show(Key);//sth like this
    for (int i = 1 ; i < S.Length; i++)
    {
        string value = S[i];
        MessageBox.Show(value);//sth like this
    }
}

【讨论】:

    【解决方案3】:

    你可以用这个:

    string line = reader.ReadLine();
    Regex r = new Regex(@"(\w+){(\w+)}");
    

    现在循环这个正则表达式的结果:

    foreach(Match m in r.Matches(line)) {
        yourDict.Add(m.Groups[1], m.Groups[2].Split(' '));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多