L
Laurent Colloud
Hi,
Here my - strange - problem.
To explain it, let's take the example of football. I construct an array
of hashes of the results with team_id, total of pts, number of wins,
number of draws and number of defeats such as:
myArray = Array.new
myArray << {:team_id=>1,
ts=>5, :w=>0, :d=>5, :l=>5}
myArray << {:team_id=>2,
ts=>7, :w=>1, :d=>4, :l=>5}
myArray << {:team_id=>3,
ts=>4, :w=>0, :d=>4, :l=>6}
myArray << {:team_id=>4,
ts=>6, :w=>1, :d=>3, :l=>6}
myArray << {:team_id=>5,
ts=>5, :w=>0, :d=>5, :l=>5}
myArray << {:team_id=>6,
ts=>5, :w=>0, :d=>5, :l=>5}
myArray << {:team_id=>8,
ts=>10, :w=>2, :d=>4, :l=>4}
myArray << {:team_id=>9,
ts=>5, :w=>1, :d=>2, :l=>7}
myArray << {:team_id=>10,
ts=>8, :w=>1, :d=>5, :l=>4}
myArray << {:team_id=>11,
ts=>9, :w=>2, :d=>3, :l=>5}
myArray << {:team_id=>12,
ts=>6, :w=>1, :d=>3, :l=>6}
myArray << {:team_id=>13,
ts=>5, :w=>0, :d=>5, :l=>5}
Now, from this array, I want to get the table.
So what I want to do is to sort the array, first by total of pts, then
by number of wins (if 2 teams have the same total of points I put first
the team with more wins) and then by number of draws.
That's how - logically - I would do it anyway. But that does not seem to
be the Ruby way. Doing it that way gives me a complete mess.
No worries, doing it the other way round works (first sort by draw, then
wins, then pts)! Here is what I run:
puts "Team, Pts, W, D, L"
myArray = myArray.sort { |a,b| b[:d] <=> a[:d]
}.sort { |a,b| b[:w] <=> a[:w]
}.sort { |a,b| b[
ts] <=> a[
ts]
}.each do |row|
puts "#{row[:team_id]}, #{row[
ts]}, #{row[:w]}, #{row[:d]},
#{row[:l]}"
end
Did I say it works? Well almost! Here is my output:
Team, Pts, W, D, L
8, 10, 2, 4, 4
11, 9, 2, 3, 5
10, 8, 1, 5, 4
2, 7, 1, 4, 5
4, 6, 1, 3, 6
12, 6, 1, 3, 6
16, 5, 0, 5, 5
1, 5, 0, 5, 5
9, 5, 1, 2, 7
5, 5, 0, 5, 5
6, 5, 0, 5, 5
3, 4, 0, 4, 6
Good news, we kept the correct team_is with the correct result.
But can anyone explain me what on earth is the line 9, 5, 1, 2, 7 doing
there in the middle?
Thanks for your help!
Here my - strange - problem.
To explain it, let's take the example of football. I construct an array
of hashes of the results with team_id, total of pts, number of wins,
number of draws and number of defeats such as:
myArray = Array.new
myArray << {:team_id=>1,
myArray << {:team_id=>2,
myArray << {:team_id=>3,
myArray << {:team_id=>4,
myArray << {:team_id=>5,
myArray << {:team_id=>6,
myArray << {:team_id=>8,
myArray << {:team_id=>9,
myArray << {:team_id=>10,
myArray << {:team_id=>11,
myArray << {:team_id=>12,
myArray << {:team_id=>13,
Now, from this array, I want to get the table.
So what I want to do is to sort the array, first by total of pts, then
by number of wins (if 2 teams have the same total of points I put first
the team with more wins) and then by number of draws.
That's how - logically - I would do it anyway. But that does not seem to
be the Ruby way. Doing it that way gives me a complete mess.
No worries, doing it the other way round works (first sort by draw, then
wins, then pts)! Here is what I run:
puts "Team, Pts, W, D, L"
myArray = myArray.sort { |a,b| b[:d] <=> a[:d]
}.sort { |a,b| b[:w] <=> a[:w]
}.sort { |a,b| b[
}.each do |row|
puts "#{row[:team_id]}, #{row[
#{row[:l]}"
end
Did I say it works? Well almost! Here is my output:
Team, Pts, W, D, L
8, 10, 2, 4, 4
11, 9, 2, 3, 5
10, 8, 1, 5, 4
2, 7, 1, 4, 5
4, 6, 1, 3, 6
12, 6, 1, 3, 6
16, 5, 0, 5, 5
1, 5, 0, 5, 5
9, 5, 1, 2, 7
5, 5, 0, 5, 5
6, 5, 0, 5, 5
3, 4, 0, 4, 6
Good news, we kept the correct team_is with the correct result.
But can anyone explain me what on earth is the line 9, 5, 1, 2, 7 doing
there in the middle?
Thanks for your help!