Ruby,如何根据obect的哈希表值对对象进行排序?

时间:2017-08-23 00:38:30

标签: ruby sorting

我有一个带有散列值的对象数组。我想基于该哈希值对所有对象进行排序。我试过了objs.sort_by {|obj| obj.hash["date"]}但是没有用。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

sort_by始终有效,如果您没有获得所需的结果,那么您就无法提供正确的信息。如果您希望它按日期排序,并且您传递的是字符串,它将按字母顺序对字符串进行排序。您需要确保obj.hash['date']是正确的类型,如DateTime,Date,Integer等。

在您的情况下,您可能需要使用sort文档https://ruby-doc.org/core-2.4.1/Enumerable.html#method-i-sort

假设你想按日期排序,它是一个你可以做的字符串

objs.sort { |a, b| DateTime.parse(b.hash['date']) <=> DateTime.parse(a.hash['date']) }

如果您想使用sort_by,可以

objs.sort { |obj| DateTime.parse(obj.hash['date']) }

如上面的链接所述,sortsort_by更快,并为您提供更多控制权。我建议阅读整个排序部分。

以下是指向DateTime.parse https://ruby-doc.org/stdlib-2.4.1/libdoc/date/rdoc/DateTime.html#method-c-parse的链接。我不知道您的格式,但很容易使用DateTime.strptime https://ruby-doc.org/stdlib-2.4.1/libdoc/date/rdoc/DateTime.html#method-c-strptime解析任何格式。

如果你想给我更多的信息,我希望如果能给你一个更好的答案,我希望能有所帮助。