Array = ["a", "a", "a", "b", "b", “câ€, "c", "c","d", "d", "e"]
How can i sort the array data???
[result]
Array = [“a”, “b”, “c”, “d”, “e”]
[/result]
Array = ["a", "a", "a", "b", "b", “câ€, "c", "c","d", "d", "e"]
How can i sort the array data???
[result]
Array = [“a”, “b”, “c”, “d”, “e”]
[/result]
[“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”)
[“a”, “a”, “a”, “b”, “b”, “c”, “c”, “c”,“d”, “d”, “e”,
nil].compact.uniq.sort
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
w/ numbers also in case that’s your next question
[1,2,4, nil,3,“a”].compact.collect {|i| i.to_s}.sort.uniq
You should check out
http://dev.rubycentral.com/ref/ref_c_array.html#sort
On Jun 27, 10:17 pm, Peña, Botp [email protected] 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.
On Behalf Of Cool W.:
mainly because
1 sort expects same class for comparison
irb(main):011:0> [1,“a”].sort
ArgumentError: comparison of Fixnum with String failed
from (irb):11:in `sort’
2 nil does not have comparison method <=>
irb(main):012:0> [nil,nil].sort
NoMethodError: undefined method <=>' for nil:NilClass from (irb):12:in
sort’
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/…)
A little digression for everyone though…
irb(main):013:0> [nil].sort
=> [nil]
is that intended?
kind regards -botp
On Jun 27, 9:39 pm, Cool W. [email protected] 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
From: Phrogz [mailto:[email protected]] :
it gives the impression that nil elements are sortable.
kind regards -botp
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
Array = ["a", "a", "a", "b", "b", “câ€, "c", "c","d", "d", "e"]
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”]
From: F. Senault [mailto:[email protected]] :
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”]
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
On Jun 28, 2007, at 2:41 AM, Peña, Botp wrote:
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.
On Jun 28, 7:53 am, John J. [email protected]
wrote:
On Jun 27, 10:17 pm, Peña, Botp [email protected] 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.
On Jun 28, 2007, at 9:53 AM, John J. wrote:
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
Hi –
On Thu, 28 Jun 2007, Peña, Botp wrote:
eg,
[nil].sort
=>[nil] # yes, there is no need to sort
[nil,nil].sort
=>[nil,nil] # yes, there is no need to sortI 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).
What about:
class C; end
[C.new].sort
?
David
From: John J. [mailto:[email protected]] :
Yes, Joyce, that is the point. simple as it is.
if [nil].sort is an array, (indeed it is)
isn’t [nil,nil].sort an array, too?
kind regards -botp
On Behalf Of [email protected]:
or maybe,
[complex_objects].sort
i really avoid threading such complex objects to sort, though things
like that can be handled by sort_by or plain sort{0}.
What i’m concerned at is nil, since it’s one of the most common object
returned.
But i think i see the crux here, eg
irb(main):042:0> 1 === 1
=> true
irb(main):043:0> 1 == 1
=> true
irb(main):044:0> 1 > 1
=> false
irb(main):045:0> 1 < 1
=> false
irb(main):046:0> nil === nil
=> true
irb(main):047:0> nil == nil
=> true
irb(main):048:0> nil > nil
NoMethodError: undefined method >' for nil:NilClass from (irb):48 from :0 irb(main):049:0> nil < nil NoMethodError: undefined method
<’ for nil:NilClass
from (irb):49
from :0
?
kind regards -botp
Hi –
On Fri, 29 Jun 2007, Peña, Botp wrote:
like that can be handled by sort_by or plain sort{0}.
What i’m concerned at is nil, since it’s one of the most common object returned.
But it’s a question of whether <=> is defined or not, so C.new is in
exactly the same position as nil. So the question is: if [C.new]
(one-element array) “sorts”, why should [nil] not “sort”?
David
Le 28 juin à 12:43, Peña, Botp a écrit :
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.
We’re in an object paradigm here. We’re trying to sort an array of one
and only one object ; the nature of this object doesn’t enter into the
equation. You just don’t need to perform any comparisons to sort an
array of one element… or zero :
[].sort
=> []
Fred
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs