【问题标题】:convert char dictionary to string dictionary将字符字典转换为字符串字典
【发布时间】:2018-11-07 06:45:16
【问题描述】:

我得到了一份带有以下陈述的作业:

编写一个程序,计算字符串中除空格('')之外的所有字符。 按以下格式打印所有匹配项:

{char} -> {occurrences}

我用 char 编写了程序,但是当我在他们的作业系统中提交它时,我一直收到超时错误。这是我的代码:

SortedDictionary<char, int> text = new SortedDictionary<char, int>();
char[] characters = Console.ReadLine() 
    .Where(x => !Char.IsWhiteSpace(x))
    .ToArray();
foreach (var character in characters)
{
    if (text.ContainsKey(character))
    {
        text[character]++;
    }
    else
    {
        text.Add(character, 1);
    }
}
foreach (var character in text.OrderByDescending(x => x.Value))
{
    Console.WriteLine($"{character.Key} -> {character.Value}");
}

我无法理解如何将它作为字符串读取并仍然得到结果。这是一个例子:

"text text text" = t -> 6 e -> 3 x -> 3

【问题讨论】:

  • 假设您只需要担心 ASCII,只需创建一个包含 256 个元素的整数数组。使用字符(1 个字节)作为数组的索引来增加/恢复计数。将比 SortedDictionary 快得多。
  • 练习是用字典完成的,ASCII 不是必需的。它应该计算一个字符在给定字符串中出现的次数。
  • 您能否澄清一下:作业是否规定了字典的使用?排序字典?还是您认为可以通过使用字典来避免 ASCII?

标签: c# arrays dictionary count


【解决方案1】:

所以,如果我对您的理解正确,您所需要的就是正确输出。 这应该可以解决问题:

foreach (var character in text.OrderByDescending(x => x.Value))
{
    Console.WriteLine(String.Format("{0}->{1}", character.Key, character.Value));
}

【讨论】:

    【解决方案2】:

    我不确定你的期望,但是如果你使用字符串而不是字符数组可以提高一点性能:

                var text = new SortedDictionary<char, int>();
                var inputText = Console.ReadLine();
    
                foreach (var character in inputText)
                {
                    if (character == ' ')
                    {
                        continue;
                    }
    
                    if (text.ContainsKey(character))
                    {
                        text[character]++;
                    }
                    else
                    {
                        text.Add(character, 1);
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多