2

我是红宝石的新手。我有一个(已经排序的)具有以下值的哈希。我想根据那里的值将这些键放在多维数组中。所以,例如

为了

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] ] 这样的数组

4

3 回答 3

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新的哈希。如果未定义,我们为每个 new 创建一个新数组keysnew_hash[value] ||= []然后只需将新哈希中的所有键用<< key. 新的哈希将类似于

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

最后,您只需要这些值,new_hash.values然后就完成了。

哈希 API

于 2012-10-10T01:29:13.940 回答
1
hash.group_by{|k, v| v}.values.map(&:first)
于 2012-10-10T07:43:49.707 回答
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”等。

于 2012-10-10T01:14:06.780 回答