class Array
Public Instance Methods
indexes(match_condition = nil) { |item| ... }
click to toggle source
# File lib/slice_by_indexes/extention/array.rb, line 3 def indexes(match_condition = nil) if block_given? self.each_with_index.map { |item, i| i if yield(item) }.reject(&:nil?) else self.each_with_index.map { |item, i| i if item == match_condition }.reject(&:nil?) end end
slice_by_indexes(match_condition = nil) { |i| ... }
click to toggle source
# File lib/slice_by_indexes/extention/array.rb, line 11 def slice_by_indexes(match_condition = nil) result = [] indexes = if block_given? self.indexes { |i| yield(i) } else self.indexes match_condition end indexes.each_with_index do |item, i| # # indexが最後だったら、現在の位置から末尾までを取得 # if i == (indexes.size - 1) result << self[item..(self.size - 1)] else # # [1, 1]みたいに取得したい値(match_condition)の値が続いている場合 # 取得したindexが連番になっているはず # # その場合は現在の値を取得 # そうでない場合、現在の位置から次の一致条件の値までを取得 # if indexes[i + 1] - item == 1 result << [self[item]] else result << self[item..(indexes[i + 1] - 1)] end end end result end