0

文字列をキーとして、intを単語とその出現回数を表す値として格納する辞書があります。ユーザーは、使用回数または1文字目のアルファベット順に並べ替えることができる必要があります。LINQは初めてですが、使用したいと思います。次のコードを使用して、開始文字に基づいて単語をグループ化することができました。

public string AlphabeticWordBuilder()
{
    List<String> words = this.myWords.WordsAsList();
    words.Sort();
    return GroupWords(words);
}

private static string GroupWords(List<String> words)
{
    String formatedWords = string.Empty;
    var groups =
        from w in words
        group w by w.First();
    foreach (var group in groups)
    {
        formatedWords += ("\n" + group.Key + ":\n");
        foreach (var w in group)
        {
            formatedWords += (w);
        }
    }
    return formatedWords;
}

ただし、この方法では、辞書のキーをリストに変換する必要があり、値が失われます。同様の方法で辞書を値でグループ化できるはずですが、アルファベット順で使用しているコードにキーと値の関係を組み込む方法がわかりません。誰かがLINQを使用して辞書を値でグループ化する例を投稿できますか?

また、LINQメソッドの構文を避け、可能であれば上記のLINQクエリ式の構文を引き続き使用したいと思います。

アルファベット順の出力例:

で始まる単語:

と冒険(電気ショック療法)

周波数による出力例:

1回出現する単語:

ものと問題

私がやろうとしていることの不完全な例:

public string FrecquincyWordBuilder()
{
    string fromatedWords = string.Empty;
    var groups =
        from w in this.myWords
        group w by w.value;
} 
4

3 に答える 3

1

あなたの質問の最初の文字の役割について少し混乱しています...しかし、これは各単語の最初の文字でグループ化され、次にその単語の出現順にグループを並べ替えます。

   var groups =
      from w in this.myWords
      group w by w.Key.First() into g // group by word first letter
      select new { 
            FirstLetter = g.Key, // the group key is the first letter
            WordsWithThisFirstLetter = // order the words with this first letter
                (from wordWithThisFirstLetter in g
                 order by wordWithThisFirstLetter.Value // the number of occurrences of this word
                 select new { 
                         Word = wordWithThisFirstLetter.Key, // dictionary item key 
                         Occurrences = wordWithThisFirstLetter.Value // dictionary item value
                 }
                ).ToArray()

      };
于 2012-11-10T21:09:38.450 に答える
0

私が問題を理解している場合、解決策は次のとおりです。

var groups = from kv in myWordsDictionary
                         group kv by kv.Key.First() into g
                         orderby g.Key
                         select g;

ラムダの場合:

var groups = myWordsDictionary.GroupBy(d => d.Key.First()).OrderBy(g => g.Key);

GroupBy-KeyValuePairsをキーの最初の文字でグループ化します。

OrderBy-グループをアルファベット順に並べ替える

于 2012-11-10T21:16:05.133 に答える
0

これは私が使用しているコードです。

  public string FrecquincyWordBuilder()
  {

      string fromatedWords = string.Empty;
      this.myWords.SortByFrequency();
      Dictionary<string, int> wordsAndFec = this.myWords.wordsAsDictionary();
      return GroupWordsByFercs(wordsAndFec);


  }

  private static string GroupWordsByFercs(Dictionary<string, int> wordsAndFec)
  {
      String formatedWords = string.Empty;
      var groups =
          from w in wordsAndFec
          group w by w.Value;
      foreach (var group in groups)
      {
          formatedWords += ("\n Words ocurring " + group.Key + " times:\n");
          foreach (var w in group)
          {
              formatedWords += (w.Key + " ");
          }
      }
      return formatedWords;
  }
于 2012-11-11T00:13:47.333 に答える