我写了一个快速方法来确认来自网页的数据是否正确排序:
def subsort_columns(*columns)
columns.transpose.sort
end
这适用于基本测试。现在,已经引入了复杂的子排序,我很确定我仍然需要使用数组,因为不能保证散列以特定顺序返回。在这种情况下,输入的顺序表示子排序优先级。
# `columns_sort_preferences` is an Array in the form of:
# [[sort_ascending_bool, column_data]]
# i.e.
# subsort_columns([true, column_name], [false, column_urgency], [true, column_date])
# Will sort on name ascending, then urgency descending, and finally date ascending.
def subsort_columns(*columns_sort_preferences)
end
这就是我卡住的地方。我想干净地做到这一点,但除了为任何父排序上发生的每个子排序滚动一个循环之外,什么都想不出来……但这听起来是错误的。
随意提供更好的建议,因为我不依赖于这个实现。
下面是一些测试数据:
a = [1,1,1,2,2,3,3,3,3]
b = %w(a b c c b b a b c)
c = %w(x z z y x z z y z)
subsort_columns([true, a], [false, b], [false, c])
=> [[1, 'c', 'z'],
[1, 'b', 'z'],
[1, 'a', 'x'],
[2, 'c', 'y'],
[2, 'b', 'x'],
[3, 'c', 'z'],
[3, 'b', 'z'],
[3, 'b', 'y'],
[3, 'a', 'z']]
更新:
标记为重新打开,因为我在代码库中作为我自己的答案提供的函数上方的评论中链接到了这个问题。更不用说我从这里的答案中得到的帮助清楚地显示了我的问题的解决方案,我想赏金给我一个正确方向的提示。请不要删除这个问题,它对我很有帮助。如果您不同意,请至少发表评论,说明您不清楚的地方。