Actions
Feature #16899
openAdd method `Array#both_end`
Status:
Open
Assignee:
-
Target version:
-
Description
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:
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:
ary = [ "w", "x", "y", "z" ]
ary.both_end #=> ["w", "z"]
ary.both_end(2) #=> [["w", "x"], ["y", "z"]
Empty array:
[].both_end #=> [nil, nil]
[].both_end #=> [nil, nil]
Argument exceeds the array size:
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.
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:
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.
Actions
Like0
Like0Like0Like0Like0Like0Like0