使用Hash Keys填充二维数组以获得类似的值

时间:2012-10-10 01:01:08

标签: ruby

我是Ruby新手。我有一个(已经排序的)散列,其中包含以下值。我想在这些值的基础上将这些键放在多维数组中。所以,例如

有关

VALUES - KEYS 
acemrs - a
acemrs - b

acrs - c
acrs - d
acrs - e

aeoopstt - f

for - g

foru -h

我正在寻找像[[a,b],[c,d,e],[f],[g],[h]]

这样的数组

3 个答案:

答案 0 :(得分:3)

hash = {'a'=>'acemrs','b'=>'acemrs','c'=>'acrs','d'=>'acrs','e'=>'acrs','f'=>'aeoopstt','g'=>'for','h'=>'foru'}
new_hash = {}

hash.each_pair do |key, value|
  (new_hash[value] ||= []) << key
end

array = new_hash.values

我们将先前的散列values用作keys用于新散列。如果未定义,我们会为每个新keys new_hash[value] ||= []创建一个新数组,然后使用<< key推送新哈希中的所有键。新哈希将类似于

{"aeoopstt"=>["f"], "for"=>["g"], "acemrs"=>["b", "a"], "acrs"=>["e", "d", "c"], "foru"=>["h"]}

最后,您只需要这些值new_hash.values,就可以了。

Hash API

答案 1 :(得分:1)

hash.group_by{|k, v| v}.values.map(&:first)

答案 2 :(得分:0)

正好解决这个问题:Ruby multidimensional array

您可以使用NArray,一个Ruby数值数组库:

require 'narray'

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

然后

array[1][2]会返回'b',array[2][3]会返回'e',等等。