
str = «aaabbccaaaaddbab»
вывод: {«a»=›8, «b»=›4, «c»=›2, «d»=›2}
Решение1:
str = "aaabbccaaaaddbab"
=> "aaabbccaaaaddbab"
result = {}
=> {}
str.chars.each do |data|
result[data] = str.chars.count(data)
end
=> ["a", "a", "a", "b", "b", "c", "c", "a", "a", "a", "a", "d", "d", "b", "a", "b"]
result
=> {"a"=>8, "b"=>4, "c"=>2, "d"=>2}
Решение2:
str.chars.tally
=> {"a"=>8, "b"=>4, "c"=>2, "d"=>2}
Решение3:
result = str.each_char.group_by(&:itself).transform_values(&:count)
=> {"a"=>8, "b"=>4, "c"=>2, "d"=>2}
Решение4:
str.chars.group_by(&:itself).map {|key, data| [key, data.count]}.to_h
=> {"a"=>8, "b"=>4, "c"=>2, "d"=>2}
Решение5:
result = Hash.new(0) # here we intial the hash with value 0
str.chars.each {|data| result[data] += 1}
=> {"a"=>8, "b"=>4, "c"=>2, "d"=>2}
Решение 6.
Hash[str.chars.group_by{|i| i }.map{|data, value| [data, value.size]}]
=> {"a"=>8, "b"=>4, "c"=>2, "d"=>2}