From: alexandr1golubenko@... Date: 2020-03-02T19:18:38+00:00 Subject: [ruby-core:97327] [Ruby master Feature#16665] Add an Array#except_index method Issue #16665 has been updated by alex_golubenko (Alex Golubenko). shevegen (Robert A. Heiler) wrote in #note-1: > I can not comment on how useful this may be; I think I may have added something similar > once in a while, but I can not say how useful or common that would be. IMO we should > see to determine how common the above idiom is, before we can say that it should be > part of core ruby. (This is not necessarily a con-opinion from me, just that I think > it may be better to assess how useful the addition would be, objectively). > > There is one minor complaint that I have and I think it is about the name. The > word "index" is used a lot so I guess we can expect a method that has "index" to > do something with ... an index, or indici/indices - no problem there. But "except" > is quite rare in ruby. Python has try/except clause. I believe that "except" as > word is not completely fitting into ruby's parlance, as-is. I could be wrong :) > but it does not "feel" very ruby-ish. > > I can not offer a better alternative, but if we look at other ruby-method names, > we have select, reject, filter ... and .each_with_index, and similar method > names. It may be best to be slowly considering whether "except" may be a good > addition - not necessarily saying that it may be bad, but I am not sure it is > a great name. (The name can be changed if the underlying suggestion has merit, > so perhaps we should first evaluate whether the functionality is useful, > before finding an alternative name, or sticking to the suggested name.) I also thought a lot about naming and have a few variants: ``` ruby omit_indices omit_index values_out ``` ---------------------------------------- Feature #16665: Add an Array#except_index method https://bugs.ruby-lang.org/issues/16665#change-84449 * 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: