[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Array Problem, sort Array

Cool Wong

6/28/2007 3:24:00 AM

[code]
Array = ["a", "a", "a", "b", "b", â??câ?, "c", "c","d", "d", "e"]
[/code]

How can i sort the array data???

[result]
Array = ["a", "b", "c", "d", "e"]
[/result]

--
Posted via http://www.ruby-....

17 Answers

Cool Wong

6/28/2007 3:40:00 AM

0

List Rb wrote:
> ["a", "a", "a", "b", "b", "c", "c", "c","d", "d", "e"].uniq.sort
>
> array = ["a", "a", "a", "b", "b", "c", "c", "c","d", "d", "e"].uniq.sort
>
> puts array.join("WOOT!\n")

if the array include the "nil", it cannot sort, why??

["a", "a", "a", "b", "b", "c", "c", "c","d", "d", "e", nil].uniq.sort

--
Posted via http://www.ruby-....

Gavin Kistner

6/28/2007 5:28:00 AM

0

On Jun 27, 9:39 pm, Cool Wong <coolwon...@yahoo.com> wrote:
> if the array include the "nil", it cannot sort, why??
>
> ["a", "a", "a", "b", "b", "c", "c", "c","d", "d", "e", nil].uniq.sort

my_array.compact.uniq.sort

Gavin Kistner

6/28/2007 5:29:00 AM

0

On Jun 27, 10:17 pm, Peña, Botp <b...@delmonte-phil.com> wrote:
> A little digression for everyone though...
> irb(main):013:0> [nil].sort
> => [nil]
>
> is that intended?

....why wouldn't it be? Sorting an array of any 1 element should always
return a similar array.

Peña, Botp

6/28/2007 7:42:00 AM

0

From: Phrogz [mailto:gavin@refinery.com] :
# On Jun 27, 10:17 pm, Peña, Botp <b...@delmonte-phil.com> wrote:
# > A little digression for everyone though...
# > irb(main):013:0> [nil].sort
# > => [nil]
# >
# > is that intended?
#
# ...why wouldn't it be? Sorting an array of any 1 element should always
# return a similar array.

it gives the impression that nil elements are sortable.

kind regards -botp

Cool Wong

6/28/2007 8:30:00 AM

0

[code]
Array = ["a", "a", "a", "b", "b", â??câ?, "c", "c","d", "d", "e"]
[/code]


Can i calculate the data in the Array???

a a a b b c c c d d e

For example: ArrayNumber = ["3", "2", "3", "2", "1"]

--
Posted via http://www.ruby-....

F. Senault

6/28/2007 8:44:00 AM

0

Le 28 juin à 06:17, Peña, Botp a écrit :

> solution: a) convert elements to some common class (string is common)
> b) filter those you don't want sorted (using compact/reject/..)
> or select those you want (using select/map/..)

c) Use a sort(_by) block (maybe that's what you meant in a) :

>> ["a", nil, "b"].sort_by { |e| (e.nil? ? 'z' : e) }
=> ["a", "b", nil]

> A little digression for everyone though...
> irb(main):013:0> [nil].sort
> => [nil]
>
> is that intended?

Well, you don't need the comparison operator where there's only one
element, do you ?

Fred
--
There is no god up in the sky tonight No sign of heaven anywhere in
sight All that was true is left behind Once I could see now I am blind
Don't want the dreams you try to sell This disease I give to myself
(Nine Inch Nails, Suck)

Peña, Botp

6/28/2007 10:43:00 AM

0

From: F. Senault [mailto:fred@lacave.net] :
# Le 28 juin à 06:17, Peña, Botp a écrit :
# > solution: a) convert elements to some common class (string
# is common)
# > b) filter those you don't want sorted (using
# compact/reject/..)
# > or select those you want (using select/map/..)
#
# c) Use a sort(_by) block (maybe that's what you meant in a) :
# >> ["a", nil, "b"].sort_by { |e| (e.nil? ? 'z' : e) }
# => ["a", "b", nil]

yap, they're all the same, string comparison.

another stupid sample below. the comparison is in integers, indirectly handled by array#index.

shelf_order = [nil, "orange","spices","apple","peaches", "herbs"]
tobe_ordered = ["herbs", "orange","apple",nil,"peaches"]
tobe_ordered.sort_by do |e|
shelf_order.index(e)
end
=> [nil, "orange", "apple", "peaches", "herbs"]


# > A little digression for everyone though...
# > irb(main):013:0> [nil].sort
# > => [nil]
# >
# > is that intended?
#
# Well, you don't need the comparison operator where there's only one
# element, do you ?

careful with the "one" there. The array returned may be complex.
eg,
irb(main):029:0> [[nil,[nil,"a"]]].sort
=> [[nil, [nil, "a"]]]
irb(main):030:0> [[nil,[nil,"a"]]].flatten.sort
NoMethodError: undefined method `<=>' for nil:NilClass
from (irb):30:in `sort'

again, as i've said to Phrogz, the behavior hints that nil elements by themselves are sortable. Remember, programs contain blackboxes wc may be complex and not obvious, eg
complex_proc_ret_array.sort_complex.foo_proc.bar_proc

one could argue bluntly too, eg
[nil].sort
=>[nil] # yes, there is no need to sort
[nil,nil].sort
=>[nil,nil] # yes, there is no need to sort

I really value consistency of object behavior when it comes to ruby, maybe because it's too dynamic and i want least number of surprises (especially when you chain things).

Anyway, I've overlooked this behavior and now I'll have to recheck again my testcases ;)

thanks Senault and Phrogz, and kind regards -botp

John Joyce

6/28/2007 1:53:00 PM

0


On Jun 28, 2007, at 2:41 AM, Peña, Botp wrote:

> From: Phrogz [mailto:gavin@refinery.com] :
> # On Jun 27, 10:17 pm, Peña, Botp <b...@delmonte-phil.com> wrote:
> # > A little digression for everyone though...
> # > irb(main):013:0> [nil].sort
> # > => [nil]
> # >
> # > is that intended?
> #
> # ...why wouldn't it be? Sorting an array of any 1 element should
> always
> # return a similar array.
>
> it gives the impression that nil elements are sortable.
>
> kind regards -botp
>
Let's do some philosophy!
But if an array has only one element and the element is nil, is it
really an array?
It is an object of Class Array.
Well, it must be an array.

Rob Biedenharn

6/28/2007 3:05:00 PM

0

On Jun 28, 2007, at 9:53 AM, John Joyce wrote:
> On Jun 28, 2007, at 2:41 AM, Peña, Botp wrote:
>> From: Phrogz [mailto:gavin@refinery.com] :
>> # On Jun 27, 10:17 pm, Peña, Botp <b...@delmonte-phil.com> wrote:
>> # > irb(main):013:0> [nil].sort
>> # > => [nil]
>>
>> it gives the impression that nil elements are sortable.
> Let's do some philosophy!
> But if an array has only one element and the element is nil, is it
> really an array?
> It is an object of Class Array.
> Well, it must be an array.

This thread continues to remind me of a comment made by a colleague
in about 1988:

"When searching the linked-list, the algorithm stops at the
first match unless the list has only one element and then
it goes to the end whether or not a match is found."

-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com




Gavin Kistner

6/28/2007 3:12:00 PM

0

On Jun 28, 7:53 am, John Joyce <dangerwillrobinsondan...@gmail.com>
wrote:
> > # On Jun 27, 10:17 pm, Peña, Botp <b...@delmonte-phil.com> wrote:
> > # > irb(main):013:0> [nil].sort
> > # > => [nil]
>
> Let's do some philosophy!
> But if an array has only one element and the element is nil, is it
> really an array?
> It is an object of Class Array.
> Well, it must be an array.

Of course it's an Array. And (unlike Lua) it is an Array with exactly
1 object in it. The fact that that object happens to be a member of
NilClass is no different than objects of TrueClass or Fixnum or yet
another Array.

[nil] != []
[1,nil] != [1]
[1,nil,2] != [1,2]

It's more than the fact that Ruby thinks they're different. They have
completely different, distinct, well-defined meanings.