Ruby on rails 有没有一种优雅的方法可以通过哈希映射进行排序?

Ruby on rails 有没有一种优雅的方法可以通过哈希映射进行排序?,ruby-on-rails,ruby,sorting,hash,Ruby On Rails,Ruby,Sorting,Hash,我有一个带标签的带编号的问题的散列(键),以及五个可能的答案(值) 数据库按用户保存,每个问题保存一个值。因此,数据库中每个likert#可以有一个值的任意组合

我有一个带标签的带编号的问题的散列
(键)
,以及五个可能的答案
(值)

数据库按用户保存,每个问题保存一个值。因此,数据库中每个
likert#
可以有一个值的任意组合<但是数据库将不会按回答顺序保存它们

因此,我试图找到一种优雅的方法,根据给定的两个响应在
likert_2


所以如果我有:
[choice\u5pjbfzoqpc choice\u5mmp0cmr9tc]
。然后,它们应该被反向返回为:
[choice_5mMP0CMR9tC,choice_5pjbfzoqpc]
,因为
choice_5mMP0CMR9tC
出现在
likert_1
中,而
choice_5pjbfzoqpc
出现在
likert_2

正如我在评论中指出的,在检索答案的查询中进行排序可能比在查询之后进行排序更高效、更优雅。由于您有
Answer
和(大概是)
Question
表,并且
Answer
Question
之间存在关系,因此您可以使用order BY在查询中对所需的
Question
属性进行排序

话虽如此,;由于您询问有关排序
数组
的问题,该数组包含基于所提供的
散列
中的问题顺序的答案,并且还没有人回答,因此我将回答该问题

这里的简单想法是找到包含答案的问题索引作为其选择之一,并使用该索引作为
sort\u by
属性。您可以通过以下方式执行此操作:

answers = ["choice_5pjBFzoqqpc", "choice_5mMP0CMR9tC"]

question_choices = questions.values
sorted = answers.sort_by { |a| question_choices.find_index { |c| c.include? a } }
# ["choice_5mMP0CMR9tC", "choice_5pjBFzoqqpc"]

响应是如何存储的?作为
Answer
对象,其中属性
Answer
包含例如
choice\u 5mMP0CMR9tC
。我可以通过执行
@answers.map(&:answer)
访问一系列选项。时间戳不按顺序排列有什么原因吗?根据您处理的数据规模,排序可能是一项非常昂贵的操作。数据库永远不会按顺序保存数据,您从数据库检索数据的顺序取决于您请求的顺序以及某个字段的值,如果您的数据字段太大或不是alpanumeric,您最好在单独的字段中提供排序数据,这样您就有了
Answer
对象的集合,而您不知道它们属于什么键?因为如果你知道这些密钥,你应该能够对它们进行相应的排序。也许你需要发布你的
答案
对象,否则很难理解你的问题。这很有效。实际上并没有问题表,我每页最多只能排序10个答案,所以它本身并不完全“昂贵”。谢谢很公平,很高兴我能帮忙!
answers = ["choice_5pjBFzoqqpc", "choice_5mMP0CMR9tC"]

question_choices = questions.values
sorted = answers.sort_by { |a| question_choices.find_index { |c| c.include? a } }
# ["choice_5mMP0CMR9tC", "choice_5pjBFzoqqpc"]