加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby可枚举的反向检测

发布时间:2020-12-16 19:30:31 所属栏目:百科 来源:网络整理
导读:假设我有以下数组: views = [ { :user_id = 1,:viewed_at = '2012-06-29 17:03:28 -0400' },{ :user_id = 1,:viewed_at = '2012-06-29 17:04:28 -0400' },{ :user_id = 2,:viewed_at = '2012-06-29 17:05:28 -0400' },{ :user_id = 3,:viewed_at = '2012-06
假设我有以下数组:
views = [
  { :user_id => 1,:viewed_at => '2012-06-29 17:03:28 -0400' },{ :user_id => 1,:viewed_at => '2012-06-29 17:04:28 -0400' },{ :user_id => 2,:viewed_at => '2012-06-29 17:05:28 -0400' },{ :user_id => 3,:viewed_at => '2012-06-29 17:06:28 -0400' },:viewed_at => '2012-06-29 17:07:28 -0400' },:viewed_at => '2012-06-29 17:08:28 -0400' },:viewed_at => '2012-06-29 17:09:28 -0400' },:viewed_at => '2012-06-29 17:16:28 -0400' },:viewed_at => '2012-06-29 17:26:28 -0400' },:viewed_at => '2012-06-29 17:36:28 -0400' },:viewed_at => '2012-06-29 17:47:28 -0400' },:viewed_at => '2012-06-29 17:57:28 -0400' },:viewed_at => '2012-06-29 17:67:28 -0400' },:viewed_at => '2012-06-29 17:77:28 -0400' }
]

假设数组按照viewing_at排序

如果我想检索特定user_id的views数组中的最后一个视图哈希,我可以执行以下操作:

views.reverse.detect { |view| view[:user_id] == 1 }

detect将返回枚举中第一个项,其中块的计算结果为true.

我的问题是:我假设反向方法有O(n)成本,那么如何反向检测而不必反转数组呢?或者反向方法不是O(n)?

解决方法

方法数组#verse在时间和空间上是O(n).由于您不需要整个反转阵列,您可以使用 Array#reverse_each,即空间中的O(1).在实践中,这仅适用于真正的大型阵列.
views.reverse_each.detect { |view| view[:user_id] == 1 }
#=> {:user_id=>1,:viewed_at=>"2012-06-29 17:77:28 -0400"}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读