我有一个带有散列值的对象数组。我想基于该哈希值对所有对象进行排序。我试过了objs.sort_by {|obj| obj.hash["date"]}
但是没有用。有什么建议吗?
答案 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']) }
如上面的链接所述,sort
比sort_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解析任何格式。
如果你想给我更多的信息,我希望如果能给你一个更好的答案,我希望能有所帮助。