【发布时间】:2020-10-02 23:48:17
【问题描述】:
我目前正在使用以下代码在 Ruby 中对一个数组(数字)进行排序:
grapes_sorted = vintages_grapes.group_by(&:itself).sort_by do |k, v| -v.size end.map(&:first)
效果很好。 但是,我想将每个排序对应的计数器存储在另一个数组中。
我试过了:
grapes_sorted_counters = []
grapes_sorted = vintages_grapes.group_by(&:itself).sort_by do |k, v|
-v.size
grapes_sorted_counters << v.size
end.map(&:first)
它存储计数器,但是,排序被破坏,没有按应有的顺序排列。我想 v.size(而不是 -v.size)是块中问题的原因。
如何将出现次数正确存储在 grapes_sorted_counters[] 中? 谢谢。
【问题讨论】:
-
我很好奇你认为
-v.size在做什么。 -
先按最大值对计数器进行排序。
-
并非如此。
sort_by使用块的返回值作为其排序值进行排序,即v.size。-v.size不是该区块看到的最后一件事。实际上,为此使用sort_by是错误的方法,您应该使用sort,因为它会更快。我会在回答中解释。