如何从数组创建哈希

Mr *_*r H 1 ruby arrays hash

这是我的数组:

sorted_array = [["Friday", "42", 8], ["Friday", "34", 8], ["Friday", "41", 78], ["Friday", "35", 7], ["Friday", "40", 7], ["Friday", "36", 6], ["Friday", "39", 7], ["Friday", "37", 56], ["Friday", "38", 6], ["Monday", "38", 3], ["Monday", "39", 5], ["Monday", "37", 54], ["Monday", "40", 6], ["Monday", "36", 6], ["Monday", "41", 7], ["Monday", "35", 7], ["Monday", "42", 7], ["Monday", "34", 8]]
Run Code Online (Sandbox Code Playgroud)

我需要做:

{ 'Friday' => [ ["42", 8], ["34", 8], ["41", 78], ["35", 7], [ "40", 7], ["36", 6], [ "39", 7], ["37", 56], [ "38", 6] ]  }
Run Code Online (Sandbox Code Playgroud)

同样的"Monday".可以有人对此有所了解吗?

这是我从POST获取数据的方式:

{"0"=>{"Monday"=>{"34"=>8}, "Friday"=>{"34"=>8}}, "1"=>{"Monday"=>{"35"=>7}, "Friday"=>{"35"=>7}}, "2"=>{"Monday"=>{"36"=>6}, "Friday"=>{"36"=>6}}, "3"=>{"Monday"=>{"37"=>54}, "Friday"=>{"37"=>56}}, "4"=>{"Monday"=>{"38"=>3}, "Friday"=>{"38"=>6}}, "5"=>{"Monday"=>{"39"=>5}, "Friday"=>{"39"=>7}}, "6"=>{"Monday"=>{"40"=>6}, "Friday"=>{"40"=>7}}, "7"=>{"Monday"=>{"41"=>7}, "Friday"=>{"41"=>78}}, "8"=>{"Monday"=>{"42"=>7}, "Friday"=>{"42"=>8}}}
Run Code Online (Sandbox Code Playgroud)

然后我把它变成数组并排序:

 hash_array = []
 specific_ranges.each do |key, value|
   value.each do |day, scores|
      scores.each do |a_score, amount|
         hash_array.push [day, a_score, amount]
      end
   end
 end
Run Code Online (Sandbox Code Playgroud)

排序方式:

sorted_array = hash_array.sort_by &:first
Run Code Online (Sandbox Code Playgroud)

hir*_*lau 5

Ruby MAGIC:

p sorted_array.group_by(&:shift) #=> {"Friday"=>[["42", 8], ["34", 8], ["41", 78], ["35", 7] ...
Run Code Online (Sandbox Code Playgroud)

说明:shift获取数组的第一个值,同时将其从数组中删除,因此group_by函数可以准确地生成您要查找的内容.

  • 这很漂亮. (2认同)