Issue #16899 has been updated by S_H_ (Shun Hiraoka). Thanks for feedbacks. shan (Shannon Skipper) wrote in #note-1: > I think #both_ends reads better in the plural form. Or #first_last harkens to #min_max and is unambiguous. Other options might be #extremes or #bookends. > > I'd vote #first_last. shevegen (Robert A. Heiler) wrote in #note-2: > I think #first_last would be a better name as well; primary reason being that we > already have #first and #last. > > I am also ok with the proposal itself, although I think I have not had a need to > use this often. But I don't mind such a method existing. > > #extremes is a bit of a strange name though. It reminds me of mathematics. > > #bookends for some reason reminds me of a bookworm - no idea why. :) > > #both_end and #both_ends are a bit strange as names. I think one problem here > is that the name implies "ends", but we also have #first and #last, and I am > not sure if both first, and last, can be considered as two ends? What about > circular arrays? :P > > So I think #first_last would be a better name. (A single name might be better > but it is harder to find a goot name there.) #first_last is good name. I use this name. shyouhei (Shyouhei Urabe) wrote in #note-5: > Why not start as a gem? There are things not possible without core changes, but it seems this requested feature needs no such things. OK, I'll started create gem to Array#first_last and other useful methods implmented. Thanks. ---------------------------------------- Feature #16899: Add method `Array#both_end` https://bugs.ruby-lang.org/issues/16899#change-85693 * Author: S_H_ (Shun Hiraoka) * Status: Open * Priority: Normal ---------------------------------------- Add a method that gets both the first and the last elements of an array: `Array#both_end`. ## Current Status Sometimes, we want to get the elements at both ends of an array. But now, no method has this behavior. So, define this method: ```ruby class Array def get_first_and_last(count) [self.first(count), self.last(count)] end end ``` ## Proposal Get the elements at both ends of an array with `Array#both_end`. Implement a new method `Array#both_end` that gets the elements at both ends of an array. ## Array#both_end behavior Normal array: ```ruby ary = [ "w", "x", "y", "z" ] ary.both_end #=> ["w", "z"] ary.both_end(2) #=> [["w", "x"], ["y", "z"] ``` Empty array: ```ruby [].both_end #=> [nil, nil] [].both_end #=> [nil, nil] ``` Argument exceeds the array size: ```ruby ary = [ "w", "x", "y", "z" ] ary.both_end(10) #=> [[ "w", "x", "y", "z" ], [ "w", "x", "y", "z" ]] ``` ## Implementation This implementation uses `Array#asscoc`, `Array#first`, and `Array#last` in C function. ```c static VALUE rb_ary_both_end(int argc, VALUE *argv, VALUE ary) { VALUE first, last; rb_check_arity(argc, 0, 1); if (RARRAY_LEN(ary) == 0) return rb_assoc_new(Qnil, Qnil); first = rb_ary_first(argc, argv, ary); last = rb_ary_last(argc, argv, ary); return rb_assoc_new(first, last); } ``` ## Problem I'm wondering if the following code should raise an error, and if so, what kind of error is the best. Argument exceeds the array size: ```ruby ary = [ "w", "x", "y", "z" ] ary.both_end(10) #=> error can't get both end value! ``` I wonder if this method name (`Array#both_end`) is the best. -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>