代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm Alex Wayne

ruby中最后一个索引是否有数组#find_index的等价物?

  •  14
  • Andrew Grimm Alex Wayne  · 技术社区  · 15 年前

    Array#find_index 允许您查找

    • object ,或

    Array#rindex 可以让您找到最后一项的索引,该索引等于 对象 ,但是是否有任何东西可以让您找到最后一个项的索引,从而使传递给它的块返回true?

    否则,我应该做类似的事情吗

    last_index = array.length - 1 - array.reverse.find_index{|item| item.is_wanted?}
    
    5 回复  |  直到 13 年前
        1
  •  19
  •   Nakilon earlonrails    10 年前

    在Ruby 1.9.2中 Array#rindex 接受块: http://apidock.com/ruby/Array/rindex

        2
  •  1
  •   Chubas    15 年前

    真遗憾,直到1.9.2。同时,如果不想反转数组,而是反向枚举搜索,则可以这样做

    last_index = array.length - 1 - array.rindex.find_index{|item| item.is_wanted? } (1.8.7及以上)

        3
  •  1
  •   telent    15 年前

    或者你可以这样做

    last_index = array.map {|i| i.is_wanted? }.rindex(true)
    

    哪个更漂亮

        4
  •  0
  •   telent    15 年前

    irb(main):015:0> a=[1,2,nil,6,8,nil,9,nil,10,11,12]
    => [1, 2, nil, 6, 8, nil, 9, nil, 10, 11, 12]
    irb(main):016:0> -(a.reverse.index(nil)+1)
    => -4
    irb(main):017:0> a[-4]
    => nil
    

    当您只想反向遍历整个数组时,反转整个数组的效率似乎仍然非常低,但这就是您的效率与美学判断

        5
  •  0
  •   Andrew Grimm Alex Wayne    11 年前

    例如,如果我想找到最后一个零的索引:

    a = [1,2,nil,6,8,nil,9,nil,10,11,12]
    # => [1, 2, nil, 6, 8, nil, 9, nil, 10, 11, 12] 
    a.inject([-1, nil]){|(current_index, matched), value| current_index += 1; matched = current_index if value.nil?; [current_index, matched]}.last
    # => 7
    
    推荐文章