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
on 08.04.2008 18:30
on 08.04.2008 18:40
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
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:
> It works well, but do you think that there is a slightly less obscure
> way!?
>
> Cheers,
>
> ~ Mark
> --
> Posted via http://www.ruby-forum.com/.
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
iEYEARECAAYFAkf7n7oACgkQJA/zY0IIRZbJgQCfclWSiv3lsOeSsBdFFMqWWTDE
aAIAoI0HoqSXrYbAhsMWRrYKp/Ngx/O0
=S3a0
-----END PGP SIGNATURE-----
on 08.04.2008 18:43
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! } Hehe. I think the natural idiom is a slice: a[1..-2] It returns an array as long as a.length > 0. -- fxn
on 08.04.2008 18:45
On Apr 8, 11:30 am, Mark Dodwell <s...@mkdynamic.co.uk> wrote: > way!? > > Cheers, > > ~ Mark > -- > Posted viahttp://www.ruby-forum.com/. a.shift a.pop ?
on 08.04.2008 18:50
Thanks, can't believe I didn't think of the 'shift' operation! Oh well, my crazy solution is quite funny I think... ~ Mark
on 08.04.2008 18:56
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 08.04.2008 19:00
a.shift a.pop This reads a little better to me. You don't want to collect the items at all right? /Shawn
on 08.04.2008 23:15
On 08.04.2008 18:56, Kyle Schmitt wrote: >> >> 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