-4

重複の可能性:
C#列の書式設定

私のコードのこのトリッキーな部分によく入っていて、しばらくの間立ち往生しているので、助けを求めています。これもC#で開発しています。これがそれを扱う私のコードの一部です:メソッドの表示は、他の人に問題を抱えている私が正しいものです。問題の出力は間違っており、foreachループと関係があります。私の出力が今どのように見えるか、そしてそれをどのように見せようとしているのかというリンクを見てください。

thanks alot guys the question was answered
4

3 に答える 3

1

以下は、目的の結果を取得するためのクエリです

var dict = items.GroupBy(x=>x.Value).ToDictionary(y=> y.Key, y=> String.Join(" ", y.Select(z=>z.Key)));

上記のクエリを理解するには、groupingToDictionary、およびString.Joinを参照してください。

以下は、変更されたプログラムです

void Main()
    {

        SortedDictionary<string, int> dict =Words();
        display(dict);
        Console.WriteLine();
    }

    private static SortedDictionary<String, int> Words()
    {

        SortedDictionary<string, int> dic = new SortedDictionary<string, int>();

        String input = "today is Wednesday right and it sucks. today how are you are you a rabbit today";
        string[] word = Regex.Split(input, @"\s");

        foreach (string current in word)
        {
            string wordKey = current.ToLower();

            if (dic.ContainsKey(wordKey))
            {
                ++dic[wordKey];
            }
            else
            {
                dic.Add(wordKey, 1);
            }
        }
        return dic;
    }

    private static void display(SortedDictionary<string, int> dictionary)
    {

         var items = from pair in dictionary
                orderby pair.Value descending
                select pair;
        var dict = items.GroupBy(x=>x.Value).ToDictionary(y=> y.Key, y=> String.Join(" ", y.Select(z=>z.Key)));
          foreach (var item in dict)
         {
             Console.WriteLine("Words occurung "+item.Key +" times");
             Console.WriteLine("{0}", item.Value);
         }

        Console.ReadLine();
    }

出力

Words occurung 3 times 
today 
Words occurung 2 times 
are you 
Words occurung 1 times 
a and how is it rabbit right sucks. wednesday
于 2012-11-09T04:35:48.163 に答える
1
var max =
    (from pair in dictionary
    select pair.Value).Max()
for (int i = max; i > -1; i--)
{
    var items =
        from pair in dictionary
        where pair.Value == i
        select pair.Key;
    if (items.Count() > 0)
    {
        Console.WriteLine("\nWords occuring " + i.ToString() +" times");
        int count = 0;
        foreach(var item in items)
        {
            if (count == 4)
            {
                Console.WriteLine("");
                count = 0;
            }
            else
            {
                count++;
            }
            Console.Write(item + "\t");
        }
    }   
}

displayメソッドのコードをこれに似たものに置き換えると、目的の結果が返されます。

于 2012-11-09T04:30:52.707 に答える
0

select で .Distinct() を使用します。

var items = (from pair in dictionary order by pair.Value descending select pair).Distinct();

于 2012-11-09T04:17:19.083 に答える