可以将时间戳存储为哈希中的键并使其可排序吗?
Possible to store timestamps as keys in Hash and make it sortable?
我有一个用户可以编辑的评论模型。我想保存评论的每个新版本,以及它在 Facebook 中的工作方式。
我没有为每个新提交的编辑创建一个新记录的关联模型,而是考虑使用活动模型的 Serialization 并为每个新编辑插入一个哈希 key/value-pair。
提交的文本将是价值,编辑时间将是关键。
是否可以将 DateTime 值保存为键,然后能够按键按时间顺序对哈希进行排序?如果是肯定的,我将如何创建密钥?
我同意关于它很奇怪的评论,但是是的,它可以在 Ruby 中完成。您可以将 Time 对象设置为散列的键,如下所示:
hash = {}
hash[Time.now] = 'value'
hash
#=> {2015-09-30 11:45:41 -0500=>1}
如果您的时间被初始化为字符串,您可以使用以下方法将其解析为 Time
对象:
Time.parse("12:00")
#=> 2015-09-30 12:00:00 -0500
最后,Ruby 中的散列自版本 1.8 或 1.9 以来保持顺序,但 不可 排序,因此您可以使用 [= 创建仅包含键的数组14=] 然后对键进行排序:
hash = {}
hash[Time.now] = 'value'
hash[Time.now] = 'value2'
hash[Time.now] = 'value3'
hash[Time.now] = 'value4'
hash[Time.now] = 'value5'
hash
#=> {
2015-09-30 11:50:17 -0500=>"value",
2015-09-30 11:50:18 -0500=>"value2",
2015-09-30 12:04:05 -0500=>"value3",
2015-09-30 12:04:04 -0500=>"value4",
2015-09-30 12:04:06 -0500=>"value5",
}
hash.keys
#=> [
2015-09-30 11:50:17 -0500
2015-09-30 11:50:18 -0500,
2015-09-30 12:04:05 -0500,
2015-09-30 12:04:04 -0500,
2015-09-30 12:04:06 -0500,
]
shuffled_keys = hash.keys.shuffle
#=> [
2015-09-30 12:04:04 -0500,
2015-09-30 12:04:06 -0500,
2015-09-30 11:50:18 -0500,
2015-09-30 12:04:05 -0500,
2015-09-30 11:50:17 -0500
]
latest_key = shuffled_keys.sort.last
#=> 2015-09-30 12:04:06 -0500
hash[latest_key]
#=> "value5"
我有一个用户可以编辑的评论模型。我想保存评论的每个新版本,以及它在 Facebook 中的工作方式。
我没有为每个新提交的编辑创建一个新记录的关联模型,而是考虑使用活动模型的 Serialization 并为每个新编辑插入一个哈希 key/value-pair。
提交的文本将是价值,编辑时间将是关键。
是否可以将 DateTime 值保存为键,然后能够按键按时间顺序对哈希进行排序?如果是肯定的,我将如何创建密钥?
我同意关于它很奇怪的评论,但是是的,它可以在 Ruby 中完成。您可以将 Time 对象设置为散列的键,如下所示:
hash = {}
hash[Time.now] = 'value'
hash
#=> {2015-09-30 11:45:41 -0500=>1}
如果您的时间被初始化为字符串,您可以使用以下方法将其解析为 Time
对象:
Time.parse("12:00")
#=> 2015-09-30 12:00:00 -0500
最后,Ruby 中的散列自版本 1.8 或 1.9 以来保持顺序,但 不可 排序,因此您可以使用 [= 创建仅包含键的数组14=] 然后对键进行排序:
hash = {}
hash[Time.now] = 'value'
hash[Time.now] = 'value2'
hash[Time.now] = 'value3'
hash[Time.now] = 'value4'
hash[Time.now] = 'value5'
hash
#=> {
2015-09-30 11:50:17 -0500=>"value",
2015-09-30 11:50:18 -0500=>"value2",
2015-09-30 12:04:05 -0500=>"value3",
2015-09-30 12:04:04 -0500=>"value4",
2015-09-30 12:04:06 -0500=>"value5",
}
hash.keys
#=> [
2015-09-30 11:50:17 -0500
2015-09-30 11:50:18 -0500,
2015-09-30 12:04:05 -0500,
2015-09-30 12:04:04 -0500,
2015-09-30 12:04:06 -0500,
]
shuffled_keys = hash.keys.shuffle
#=> [
2015-09-30 12:04:04 -0500,
2015-09-30 12:04:06 -0500,
2015-09-30 11:50:18 -0500,
2015-09-30 12:04:05 -0500,
2015-09-30 11:50:17 -0500
]
latest_key = shuffled_keys.sort.last
#=> 2015-09-30 12:04:06 -0500
hash[latest_key]
#=> "value5"