[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Remove first and last items from array

Mark Dodwell

4/8/2008 4:31:00 PM

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

7 Answers

Florian Gilcher

4/8/2008 4:40:00 PM

0

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

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)

iEYEARECAAYFAkf7n7oACgkQJA/zY0IIRZbJgQCfclWSiv3lsOeSsBdFFMqWWTDE
aAIAoI0HoqSXrYbAhsMWRrYKp/Ngx/O0
=S3a0
-----END PGP SIGNATURE-----

dkmd_nielsen

4/8/2008 4:40:00 PM

0

On Apr 8, 11:30 am, Mark Dodwell <s...@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 viahttp://www.ruby-....

a.shift
a.pop
?

Xavier Noria

4/8/2008 4:42:00 PM

0

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


Mark Dodwell

4/8/2008 4:50:00 PM

0

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

Kyle Schmitt

4/8/2008 4:56:00 PM

0

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]

Shawn Anderson

4/8/2008 5:00:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

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

Robert Klemme

4/8/2008 9:11:00 PM

0

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]

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