From: shevegen@... Date: 2020-02-29T18:05:33+00:00 Subject: [ruby-core:97311] [Ruby master Feature#16665] Add an Array#except_index method Issue #16665 has been updated by shevegen (Robert A. Heiler). 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.) ---------------------------------------- Feature #16665: Add an Array#except_index method https://bugs.ruby-lang.org/issues/16665#change-84436 * 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: