1

我想根据内容对数组的字符串元素进行分组。

["abc", "abc", "def", "ghi", "ghi"].group_by { |x| some code }

所以我希望它返回:

[["abc", "abc", "abc"],["def"],["ghi", "ghi"]]

我尝试了以下方法:

irb(main):065:0> ["abc", "abc", "def", "ghi", "ghi"].group_by { |x| x }

它返回:{"abc"=>["abc", "abc"], "def"=>["def"], "ghi"=>["ghi", "ghi"]}

最好的方法是什么?

4

5 回答 5

2

你只需要一个数组。然后你写:

["abc", "abc", "def", "ghi", "ghi"].group_by { |x| x }.values
于 2013-08-08T18:10:35.617 回答
2
class Array
  def group
    h_result = {}
    self.uniq.each_with_index {|value, i| h_result[i] = self.select{|x| x==value}}
    group = h_result
  end
end

a_test = ["abc", "abc", "def", "ghi", "ghi"]
h_test = a_test.group

puts h_test.inspect
于 2013-08-08T18:12:25.640 回答
1
a = ["abc", "abc", "def", "ghi", "ghi"]
Hash[a.uniq.map.with_index{|e,i| [i,[e]*a.count(e)]}]
# => {0=>["abc", "abc"], 1=>["def"], 2=>["ghi", "ghi"]}
于 2013-08-08T18:13:50.033 回答
0

这是一个愚蠢的单线,可以让你得到你想要的。不过,这样做似乎还是有点傻。

a = ["abc", "abc", "def", "ghi", "ghi"]
Hash[a.group_by { |x| x }.values.map.with_index { |x, i| [i, x] }]
# => {0=>["abc", "abc"], 1=>["def"], 2=>["ghi", "ghi"]}
于 2013-08-08T18:13:55.867 回答
0

不是很简单,但它会做你想做的事:

["abc", "abc", "def", "ghi", "ghi"].group_by{|x|x}.each_with_index.inject({}){|m,a|m[a[1]]=a[0];m}
于 2013-08-08T18:32:58.470 回答