From: nick.schwaderer@... Date: 2020-03-02T21:42:01+00:00 Subject: [ruby-core:97330] [Ruby master Feature#16665] Add an Array#except_index method Issue #16665 has been updated by schwad (Nick Schwaderer). Hello, I was part of this discussion on Railstalk and the Rails-core issue, you can peek for additional context here: https://github.com/rails/rails/pull/38611#issuecomment-593627540 It was closed on Rails-core and suggested to be proposed here. I also tried to help with the naming because it was originally #except to match Hash#except in Rails (which has also been recommended to be extracted to Ruby-core). I am in favor of this proposal, even if the name is tweaked, or we include Hash#except as well. I think `omit_indices` is super interesting- if you saw `[1, 2, 3, 4, 5].omit_indices(2, 4)` in the wild I'm sure you'd have no doubt what it did. ---------------------------------------- Feature #16665: Add an Array#except_index method https://bugs.ruby-lang.org/issues/16665#change-84452 * Author: alex_golubenko (Alex Golubenko) * Status: Open * Priority: Normal ---------------------------------------- The main idea is to implement a method that we can use to exclude elements from the array by their indices. For example: ``` ruby %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: ```ruby 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. -- https://bugs.ruby-lang.org/ Unsubscribe: