2012-11-09 193 views
-4

可能重複:
C# Column formattingC#每次迭代

在我的代碼這個棘手的部分以及IM和被卡住暫且這麼即時通訊尋求一些幫助。我正在用C#開發它。這裏是我的代碼片,它的交易: 方法顯示是即時通訊對其他人的問題是正確的。問題輸出是錯誤的,並且與每個循環有關。請看看我的什麼輸出看起來像現在,什麼IM的鏈接試圖使它看起來像請

thanks alot guys the question was answered 
+0

@SimonWhitehead我一直在尋找該職位;);) – Hardrada

+0

普羅蒂普:不要問重複的問題。你會被炸燬。 –

+0

你的方式不對 –

回答

0

在選擇使用.Distinct():

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

+0

沒有沒有做任何事情 –

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方法中的代碼應返回所需的結果。

+0

非常感謝,但現在它看起來像這樣http://imageshack.us/photo/my-images /443/41895266.png/ –

+0

@奧斯汀史密斯因此,我使用了類似的詞。如果你希望更精確地應用格式,我的目標只是指出它寫錯的原因是放置了'Console.WriteLine(「Words occuring」+ i.ToString()+「times」);''在你的foreach循環中。 –

+0

@AustinSmith那裏的編輯應該適用你正在尋找的格式。 –

1

以下是查詢以獲得期望的結果

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

要理解上面的查詢,請參閱groupingToDictionaryString.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 
+0

哇感謝這麼多現在輸出看起來像這樣http://imageshack.us/a/img198/3569/44164476.png你會發生嗎?知道如何放置空格,以便只有四個單詞在一條線上 –

+0

它有點棘手,您需要用類似的東西替換String.Join,爲每n(本例中爲第4)個單詞放置一個新的線。 – Tilak