将一个数组转换为两个哈希值

C. *_*Yee 0 ruby

我想拆分:

array = [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]
Run Code Online (Sandbox Code Playgroud)

分成这样的两个哈希:

hash1 = {"a" => "b", "d" => "e", "g" => "h"}
hash2 = {"a" => "c", "d" => "f", "g" => "i"}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Car*_*and 5

array = [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]

hash1 = array.map { |f,m,_| [f,m] }.to_h
  #=> {"a"=>"b", "d"=>"e", "g"=>"h"}
hash2 = array.map { |f,_,l| [f,l] }.to_h
  #=> {"a"=>"c", "d"=>"f", "g"=>"i"}
Run Code Online (Sandbox Code Playgroud)

要么

def doit(arr, i1, i2)
  arr.map { |a| [a[i1], a[i2]] }.to_h
end

hash1 = doit(array, 0, 1)
  #=> {"a"=>"b", "d"=>"e", "g"=>"h"}
hash2 = doit(array, 0, 2)
  #=> {"a"=>"c", "d"=>"f", "g"=>"i"}
Run Code Online (Sandbox Code Playgroud)

  • 有点对称会很好`hash1 = array.map {| f,m,_ | [f,m]} .to_h`. (2认同)