Remove first and last items from array

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

-----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 G.

On Apr 8, 2008, at 6:30 PM, Mark D. 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 Apr 8, 2008, at 18:30 , Mark D. 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 Apr 8, 11:30 am, Mark D. [email protected] wrote:

way!?

Cheers,

~ Mark

Posted viahttp://www.ruby-forum.com/.

a.shift
a.pop
?

Thanks, can’t believe I didn’t think of the ‘shift’ operation! Oh well,
my crazy solution is quite funny I think…

~ Mark

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 18:56, Kyle S. 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

In fact there is slice :slight_smile:
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…

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs