Array resizing

V

Victor Shepelev

Maybe dumb question, but...

I have not found anything like Array.resize, i.e.

a = [1,2]

a.resize(5) #=> [1,2,nil,nil,nil]
a.resize(5, 3) #=> [1,2,3,3,3]

I can use Array.fill, but

a.fill(3, a.size, a.size+2)

looks a bit ugly, not?

Moreover, if I want to resize to size lesser then array is, I need slice.

Why not to have all-purpose resize?

Victor.
 
P

Pierre Barbier de Reuille

Victor Shepelev a =E9crit :
Maybe dumb question, but...

I have not found anything like Array.resize, i.e.

a =3D [1,2]

a.resize(5) #=3D> [1,2,nil,nil,nil] a.resize(5, 3) #=3D> [1,2,3,3= ,3]


I can use Array.fill, but

a.fill(3, a.size, a.size+2)

looks a bit ugly, not?

Moreover, if I want to resize to size lesser then array is, I need
slice.

Why not to have all-purpose resize?

Victor.
You may try :

a =3D [1,2]
a.fill(3, -1, 3) #=3D> [1,2,3,3,3]

So you may code yourself your resize :

class Array
def resize(new_size, value=3Dnil)
if new_size < length
slice!(new_size, length)
else
fill(value, -1, new_size-length)
end
self
end
end

Pierre
 
M

Marcin Mielżyński

Victor said:
Maybe dumb question, but...

I have not found anything like Array.resize, i.e.

a = [1,2]

a.resize(5) #=> [1,2,nil,nil,nil]
a.resize(5, 3) #=> [1,2,3,3,3]

I can use Array.fill, but

a.fill(3, a.size, a.size+2)

looks a bit ugly, not?

a = [1,2,3]
a += [nil] * 3
Moreover, if I want to resize to size lesser then array is, I need slice.

a = [1,2,3,4,5]
a[0..-3]

Ruby 1.9 supports Array#pop taking an integer

lopex
 
M

Marcin Mielżyński

Pierre said:
a = [1,2]
a.fill(3, -1, 3) #=> [1,2,3,3,3]

nope:

a = [1,2]
a.fill(3, -1, 3) #=> [1,3,3,3]


since -1 points to the last value in an array


lopex
 
V

Victor Shepelev

Pierre wrote
So you may code yourself your resize :

class Array
def resize(new_size, value=nil)
if new_size < length
slice!(new_size, length)
else
fill(value, -1, new_size-length)
end
self
end
end

Yes, I can (in fact, I already did).

The question is more ideological than technical. Why not to have
Array#resize in standard library? It seems not very rational.

Victor.
 
D

dblack

Hi --

Pierre wrote


Yes, I can (in fact, I already did).

The question is more ideological than technical. Why not to have
Array#resize in standard library? It seems not very rational.

I think it might be because the size of an array isn't important if
the array just contains nils, because uninitialized values default to
nil anyway. And if you're adding non-nil elements to the array, then
the fact that the size changes is not really the main point; it's just
a side-effect of the operation, so referring to it as a "resize"
operation doesn't fit very well.


David

--
David A. Black ([email protected])
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)

"Ruby for Rails" chapters now available
from Manning Early Access Program! http://www.manning.com/books/black
 
V

Victor Shepelev

David said:
I think it might be because the size of an array isn't important if
the array just contains nils, because uninitialized values default to
nil anyway. And if you're adding non-nil elements to the array, then
the fact that the size changes is not really the main point; it's just
a side-effect of the operation, so referring to it as a "resize"
operation doesn't fit very well.

Sounds reasonable.
I can tell when I stumbled upon need for __resizing__ aray: when tried to
use Array#transpose - it can't process
[
[1,2,3],
[1],
[1,2,3,4]
]

I think, it isn't sole case, when we can want having array of arbitrary
size.

Victor.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

Forum statistics

Threads
474,204
Messages
2,571,062
Members
47,669
Latest member
johnmaxwell

Latest Threads

Top