some small suggestions to Array

Í

ÍõÇ«

I'm a new user of ruby from China. I love it very much. And I believe
it will become better and better in future. During the study of ruby
these days, I have some small suggestions to ruby.

The suggestions are about the array object, I think we may provide a
much much more flexible way to refer the elements from an array.
Suppose we have an array object [1,2,3,4,5], named "a".
1.Now we have: a[from, len], The first parameter means the result will
start with a[from], and length is len. Then what about a[2,-3]? I think
a negative second parameter should means an reversed array, that is,
a[2,-3] shoule be [3,2,1].
Additionally, we may introduce a more flexible way to express the
"end with". maybe like this: a[..2, 3] (means end with a[2], length is
3, normal direction). here "..2" means end with a[2], and obviously we
should let "2.." means "start with".
Some examples:
a[2.., 3] == a[2,3] -> [3,4,5]
a[2.., -3] == a[2,-3] -> [3,2,1]
a[..2, 3] -> [1,2,3]
a[..2, 3] -> [5,4,3]
2.Now we have: a[2..3] and a[2...3] to discribe a closed interval and a
semi-open interval. I think we should provide an easy way to discrible
any kinds of interval, may be like this:
2..4 means 2,3,4
[2..4) means 2,3
(2..4] means 3,4
(2..4) means 3
the way above may be not beautiful enough, but the function is
required i guess.
Moreover, I guess a[3..1] should means [4,3,2]. it is just the
semantic of "from..to"
3.Some much more ideas:
a[i if odd?(i)] should be [2,4]
a[[1,3,3,4]] should be [2,4,4,5]
a[[1,3..4]] should be [2,4,5]
a[:]{|a|, odd?(a)} should be [1,3,5], the block works as a
filter of the result.
And what about the combination of all above?
(Some ideas come from the grammar of matlab. Its array's interface
is great.)
 
D

Damian Terentyev

I'm a new user of ruby from China. I love it very much. And I believe
it will become better and better in future. During the study of ruby
these days, I have some small suggestions to ruby.

=E6=82=A8=E5=A5=BD=EF=BC=81=E6=88=91=E5=BE=88=E5=96=9C=E6=AC=A2=E4=BB=8B=E7=
=BB=8D=E6=82=A8=EF=BC=81
I second your open ranges (a[2..] gives a subarray starting from the=20
element with index 2 to the end) as i think they are quite intuitive.
But I'm also a newcomer to Ruby, and I wonder whether there already are=20=

some beautiful ruby ways that give the desired results.

Your sincerely,
Damian/Three-eyed Fish=
 
J

Joel VanderWerf

ÍõÇ« wrote:
...
a[[1,3..4]] should be [2,4,5]

The #values_at method is useful for this:

irb(main):001:0> a = (0..9).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
irb(main):002:0> a.values_at(1..3, 5..7)
=> [1, 2, 3, 5, 6, 7]
irb(main):003:0> a.values_at(1..3, 5, 7)
=> [1, 2, 3, 5, 7]
 

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

Members online

No members online now.

Forum statistics

Threads
474,431
Messages
2,571,677
Members
48,796
Latest member
Greg L.

Latest Threads

Top