3

私はまだ ruby​​ の初心者であり、このメソッドを正確に使用するinject方法を学ぼうとしています。

このメソッドを使用してinject、文字の配列とその外観を特定の文字列で次のように返そうとしています。

def sorting(str)
  str.split("").uniq.map { |letter|
    [letter, str.split("").inject(0) { |sum, char| sum + 1 if letter == char }]
  }
end

p sorting("aaabdbbcccaaabcacba")

欲望の結果は次のようになります。

[["a", 8], ["b", 5], ["d", 1], ["c", 5]]

残念ながら、次のエラーが表示されます: undefined method '+' for nil:NilClass

私は何を間違っていinjectますか?また、その合計の利点を使用してそれを解決するにはどうすればよいですか?

4

2 に答える 2

1

別の方法は次のとおりです。

s = "aaabdbbcccaaabcacba"
s.chars.uniq.map{|c|[c,s.count(c)]}
# => [["a", 8], ["b", 5], ["d", 1], ["c", 5]]
于 2013-10-26T18:08:51.363 に答える