我有一个杂烩如下:

{
  :student_name => ['A', 'B', 'C'],
  :total_marks => [100, 25, 50]
}

我想按数组排序时:total_marks值中相应元素的顺序对该散列的每个值(数组)进行排序。结果哈希应如下所示:
{
  :student_name => ['B', 'C', 'A'],
  :total_marks => [25, 50, 100]
}

什么是可扩展的解决方案这个散列可以有许多其他属性。

最佳答案

如果你想让代码简单并且包含最少的间接操作,我建议把学生的名字和总分数放在一起,而不是作为并行数组。这样,您就可以添加额外的字段,而不必重写排序例程(否则,现在必须为新字段使用另一个并行数组)。

ExamResult = Stuct.new(:student_name, :total_mark)

exam_results = [
    ExamResult.new('Adam', '25'),
    ExamResult.new('Sajani', '100'),
    ExamResult.new('Sawa', '50')
]

# Sort
exam_results.sort_by &:total_mark

至于可伸缩性,这将在很大程度上取决于您需要什么样的可伸缩性上面的方法可能不费吹灰之力就可以处理数十万个ExamResult。如果你想在不让你的记忆负担过重的情况下完成数百万的考试结果,那么你无论如何都需要一种更好的方法来对成绩进行排序和对考试结果进行流式处理,不管你是如何组织的。

08-19 15:05