Project

General

Profile

Feature #16665

Add an Array#except_index method

Added by alex_golubenko (Alex Golubenko) 9 months ago. Updated 9 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:97310]

Description

The main idea is to implement a method that we can use to exclude elements from the array by their indices.

For example:

%w( a b c d e f).except_index(0, -1) 
=> ["b", "c", "d", "e"]

%w( a b c d e f g h ).except_index(0..1, 3, -2..-1)
=> ["c", "e", "f"]

I was meeting many questions on the StackOverflow about how to do such functionality also found many topics about it.
So I think it might a helpful addition.

I spent a few days finding the proper solution on Ruby that might be acceptable with integers and ranges(both positive and negative) and has good performance:

  def except_index(*indexes)
    indexes.each_with_object(dup) do |ind, obj|
      ind.is_a?(Range) ? ind.each { |i| obj[i] = false } : obj[ind] = false
    end.select(&:itself)
  end

As you can see it's have not the best readability so I think it's a good point to add a built-in method on C.

Also available in: Atom PDF