Rails 的 group_by 方法是否已被废弃?

7

我有一个数组需要分组,使用 'group_by' 函数似乎适合我的情况。

http://apidock.com/rails/Enumerable/group_by

我在Rails 3.2.13中使用它。

grouped_array = my_array.group_by(&:my_function)

# Assume run 'my_function' have result1 on element1, element3 and result2 on element2, element4, then: 
    # grouped_array = {
    #    result1 => [element1, element3],
    #    result2 => [element2, element4],
    #    ...
    # }

但我看到它在4.0.2版本中被弃用了。

我应该使用哪个函数?

2个回答

16

它没有被弃用。

在Ruby 1.8.7之前,没有内置group_by,因此Rails添加了它。Ruby 1.8.7添加了group_by,但是与rails的group_by返回有序哈希不同,ruby 1.8.7返回普通哈希(因为有序哈希尚未出现在ruby 1.8.7中),因此Rails继续覆盖该方法。

Ruby 1.9确实拥有group_by,因此Rails不再需要覆盖它,但是仍然保留了这段代码供仍在运行1.8.7的用户使用。

Rails 4取消了与ruby 1.8.7的兼容性,因此像这样的代码从Rails中删除了。它没有被弃用,但它已成为Ruby标准库的一部分,不再出现在Rails中。


是的,就是那样。 - Arup Rakshit
1
@camdaochemgio 是的,group_by 可以用于任何 Enumerable,包括数组。正如所提到的,它是标准 Ruby 的一部分。 - Daniël Knippers
1
可以的。Apidock的弃用警告并不是很好 - 它们经常会被移动重构的代码所困惑。 - Frederick Cheung

1
“Array#sort能解决这个问题吗?”
@my_array.sort { |item1, item2|  item1.my_function <=> item2.my_function }

不,我需要哈希表,而不是排序数组。请查看我的更新以获取输出值。 - vietstone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接