这个问题与this question很相似。问题是由于某种原因我无法使用sort
方法。我只能使用sort_by
。所以,我需要找到一种方法来排序多个属性,但每个属性的顺序不同。
我能找到的最佳答案是 Gleen (找到here),但我担心它的性能,因为该对象被复制到@o = o
中(请纠正我,如果假设它我错了。
我在想是否有办法临时存根<=>
,同时将sort_by
传递给我想要降序的属性@o = o
。这可能吗?我也不想对对象进行任何永久性更改。此外,如果我必须创建一个新对象而不会产生不必要的开销(如<=>
)到存根> a = [['a', 1], ['b', 2], ['b', 1]]
> a.sort_by { |a| [decending(a[0]), a[1])] }
=> [['b', 1], ['b', 2], ['a', 1]]
# This should sort the first value in descending
# and the second in ascending order
def decending(a)
anything that would change stub <=> method for a
end
,那么这也会很棒。
总结一下我希望拥有的行为如下:
sort_by
这是我能想到的一种方法。请随意建议任何与sort_by { |a| -a }
一起使用的解决方案,并按不同的顺序按不同的属性排序。
此外,我不能做<=>
之类的事情,因为我想要排序的东西不一定是数字。我想要的东西不仅可以用于字符串,还可以用于定义@o = o
的任何对象。
修改
事实证明,在假设"SELECT date(Time_T), AVG(reading) AS reading_avg, MIN(reading) AS reading_min, MAX(reading) AS reading_max FROM readings WHERE (Zeitpunkt_T > '2016-02-20') GROUP BY (SELECT date(Time_T))"
复制对象并且价格不贵时,我显然是错误的。但我希望那里有更好的解决方案。一个问题是创建这么多对象可能会造成GC瓶颈。