2016-06-20 15 views
-5

文字配列を入力として受け付け、配列内の各文字の出現回数をカウントし、結果をformat(例:{'c'、 'e'、 'e 」、 'E'、 ''、 'q' は}文字配列内の出現数をカウントする

a - * 
c - * 
e - *** 
q - * 

だろう私は辞書で再び試みたが、どのように私は、LINQでは、アスタリスク

class Program 
    { 
    public static void Main() 
    { 
     char[] characters = { 'c', 'e', 'e', 'e', 'a', 'q' }; 
     charFuction(characters); 
    } 

    static Dictionary<char, int> occurrences = new Dictionary<char, int>(); 
    static void charFuction(char[] characters) 
    { 
     foreach(char c in characters) 
     { 
      if (occurrences.ContainsKey(c)) 
      { 
       occurrences[c]++; 
      } 
      else 
      { 
       occurrences.Add(c, 1); 
      } 
     } 
     foreach(char k in occurrences.Keys) 
     { 
      Console.WriteLine(k + " - " + occurrences[k]); 
     } 
    } 
+0

あなたが試したことを示すために編集してください。 – dasblinkenlight

+0

ここにヒントがあります:見られる各 'char'の数を追跡するために' Dictionary 'を使用してください。 – juharr

答えて

1

を得るのです:

public static IEnumerable<string> GetCharCountPlaceholders(IEnumerable<char> chars, char placeholder = '*', string charCountDelimiter = " - ") 
{ 
    return chars 
     .GroupBy(c => c) 
     .OrderBy(g => g.Key) 
     .Select(g => String.Format("{0}{1}{2}" 
     , g.Key 
     , charCountDelimiter 
     , new String(placeholder, g.Count()))); 
} 

たとえば、次のようにして呼び出すことができます。

char[] chars = { 'c', 'e', 'e', 'e', 'a', 'q' }; 
string result = String.Join(Environment.NewLine, GetCharCountPlaceholders(chars)); 

a - * 
c - * 
e - *** 
q - * 
+0

実際には 'g => $" {g.Key} - {new string( '*'、g.Count()} ''のようになります。 – juharr

+0

@juharr:true、OPは実際のカウントを挿入するにはあまりにも怠惰だと思った –

+0

私は彼らが怠け者であるかどうかはわかりませんが、割り当てが棒グラフのように出力を意図していると思います。 – juharr

関連する問題