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"]