【问题标题】:Is it possible to create an array from the frequency of chars within a string? [closed]是否可以根据字符串中字符的频率创建数组? [关闭]
【发布时间】:2011-11-25 16:58:38
【问题描述】:

基本上,我发现了一段旧的 LINQ C# 代码,它计算了某个字符串中最常见的字母。但是,我正在使用频率分析来解决已被移位加密的解码文本,因此我希望它不仅返回最流行的字符,而且还返回按出现频率排序的字符数组。

这是我在这里找到的 LINQ 代码:

input.GroupBy(x => x).OrderByDescending(x => x.Count()).First().Key

【问题讨论】:

  • 哦,拜托,这是一个“为我工作”的问题吗?我建议你去学习 LINQ,并了解那段代码的作用。 到底谁赞成这个?
  • 你想要什么?想知道这段代码好不好?或者你想要一个优化的版本?
  • 相信我,R. Martinho Fernandes,我已经脱离了循环一段时间,以前从未使用过 LINQ,而且我已经筋疲力尽地试图研究如何做到这一点。以为我可以在这里得到帮助
  • 由于您之前从未使用过 LINQ,所以我支持学习 LINQ 的建议。
  • 我只会将它用于这一项字符串搜索。考虑到我的时间限制,我认为学习 LINQ 并不合适。

标签: c# string linq frequency-analysis


【解决方案1】:

嗯,你几乎已经拥有它了。

input.GroupBy(x => x).OrderByDescending(x => x.Count()).Select(x => x.Key).ToArray();

【讨论】:

    【解决方案2】:

    .First().Key 替换为.Select(group => group.Key) 应该会返回按频率降序排列的字符。

    【讨论】:

      【解决方案3】:

      这里有一个不使用LINQ的解决方案,不学习LINQ可能也能理解:

      // count all the frequencies
      var frequencies = new Dictionary<char, int>;
      foreach(char c in input)
      {
          if(frequencies.ContainsKey(c))
          {
              frequencies[c]++;
          }
          else
          {
              frequencies.Add(c, 1);
          }
      }
      // Get the characters
      var characters = new List<char>(frequencies.Keys);
      // Sort them
      characters.Sort((x, y) => frequencies[x].CompareTo(frequencies[y]));
      

      【讨论】:

        【解决方案4】:
        input.GroupBy(x => x).OrderByDescending(x => x.Count()).Select(group => group.Key).ToArray();
        

        【讨论】:

          【解决方案5】:

          信息都在那里,只是不要扔掉它:

          Dictionary<char, int> count =
            input.GroupBy(g => g).ToDictionary(g => g.Key, g => g.Count());
          

          哦,对了,您只需要字符,而不是频率。那你就得扔掉一些信息:

          char[] chars =
            input.GroupBy(g => g).OrderByDescending(g => g.Count()).Select(g => g.Key)
            .ToArray();
          

          【讨论】:

          • 也会用这个,非常感谢!
          猜你喜欢
          • 1970-01-01
          • 2018-12-02
          • 1970-01-01
          • 2021-05-06
          • 2013-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多