Hi,
I need to remove the first and last items in an array (which may have 1,
2 or more items so the resulting array after removal may be empty). I
came up with this:
a = [1,2,3,4,5]
2.times { a.pop; a.reverse! }
It works well, but do you think that there is a slightly less obscure
way!?
Cheers,
~ Mark
···
--
Posted via http://www.ruby-forum.com/.
Hi,
"pop"ing the first element of an Array is called "shift" ("unshift" being the operation of adding one element
in front of the array).
a = [1,2,3,4,5]
a.pop; a.shift;
Florian Gilcher
···
On Apr 8, 2008, at 6:30 PM, Mark Dodwell wrote:
Hi,
I need to remove the first and last items in an array (which may have 1,
2 or more items so the resulting array after removal may be empty). I
came up with this:
a = [1,2,3,4,5]
2.times { a.pop; a.reverse! }
It works well, but do you think that there is a slightly less obscure
way!?
Cheers,
~ Mark
--
Posted via http://www.ruby-forum.com/\.
Hehe.
I think the natural idiom is a slice:
a[1..-2]
It returns an array as long as a.length > 0.
-- fxn
···
On Apr 8, 2008, at 18:30 , Mark Dodwell wrote:
I need to remove the first and last items in an array (which may have 1,
2 or more items so the resulting array after removal may be empty). I
came up with this:
a = [1,2,3,4,5]
2.times { a.pop; a.reverse! }
a.shift
a.pop
This reads a little better to me.
You don't want to collect the items at all right?
/Shawn
···
On Tue, Apr 8, 2008 at 9:30 AM, Mark Dodwell <seo@mkdynamic.co.uk> wrote:
Hi,
I need to remove the first and last items in an array (which may have 1,
2 or more items so the resulting array after removal may be empty). I
came up with this:
a = [1,2,3,4,5]
2.times { a.pop; a.reverse! }
It works well, but do you think that there is a slightly less obscure
way!?
Cheers,
~ Mark
--
Posted via http://www.ruby-forum.com/\.
Thanks, can't believe I didn't think of the 'shift' operation! Oh well,
my crazy solution is quite funny I think...
~ Mark
···
--
Posted via http://www.ruby-forum.com/.
In fact there _is_ slice 
which takes the same args.
a.slice(1..-2)
and even a destructive
a.slice!(1..-2)
but for some reason my ruby really didn't like it... so never mind the
destructive part....
···
On Tue, Apr 8, 2008 at 11:41 AM, Xavier Noria <fxn@hashref.com> wrote:
On Apr 8, 2008, at 18:30 , Mark Dodwell wrote:
Hehe.
I think the natural idiom is a slice:
a[1..-2]
Slice works pretty well - unless the array is small:
irb(main):004:0> a=(1..5).to_a
=> [1, 2, 3, 4, 5]
irb(main):005:0> a.slice! 1...-1
=> [2, 3, 4]
irb(main):006:0> a=
=>
irb(main):007:0> a.slice! 1...-1
=> nil
irb(main):008:0> a
=> [nil]
irb(main):009:0> a=[1]
=> [1]
irb(main):010:0> a.slice! 1...-1
=>
irb(main):011:0>
irb(main):012:0* a
=> [1]
Kind regards
robert
···
On 08.04.2008 18:56, Kyle Schmitt wrote:
In fact there _is_ slice 
which takes the same args.
a.slice(1..-2)
and even a destructive
a.slice!(1..-2)
but for some reason my ruby really didn't like it... so never mind the
destructive part....
On Tue, Apr 8, 2008 at 11:41 AM, Xavier Noria <fxn@hashref.com> wrote:
On Apr 8, 2008, at 18:30 , Mark Dodwell wrote:
Hehe.
I think the natural idiom is a slice:
a[1..-2]