回答編集履歴
3
Update
answer
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
.sort_by{|e| e[1]}.reverse[...3].collect(&:first)]}
|
13
13
|
|
14
14
|
ranking.map(&:flatten).transpose.each_with_index{|(m, w), idx|
|
15
|
-
idx == 0 ? printf("%
|
15
|
+
idx == 0 ? printf("%5s%3s\n", m, w) : printf("%2d%4d%4d\n", idx, m, w)
|
16
16
|
}
|
17
17
|
|
18
18
|
#
|
2
Update
answer
CHANGED
@@ -11,8 +11,13 @@
|
|
11
11
|
.group_by{|g| g["年齢"]}.map{|age, r| [age, r.count]}
|
12
12
|
.sort_by{|e| e[1]}.reverse[...3].collect(&:first)]}
|
13
13
|
|
14
|
-
|
14
|
+
ranking.map(&:flatten).transpose.each_with_index{|(m, w), idx|
|
15
|
+
idx == 0 ? printf("%4s%4s\n", m, w) : printf("%4d%4d%4d\n", idx, m, w)
|
16
|
+
}
|
15
17
|
|
16
18
|
#
|
19
|
+
男 女
|
20
|
+
1 39 61
|
21
|
+
2 30 45
|
17
|
-
|
22
|
+
3 58 34
|
18
23
|
```
|
1
Update
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
入力する CSV ファイルにヘッダ行(「氏名,氏名(カタカナ),性別,...」)が付いているのであれば、`CSV::table` を使っても良いかもしれません。以下では質問文にある CSV データを `data.csv` としています。
|
1
|
+
入力する CSV ファイルにヘッダ行(「氏名,氏名(カタカナ),性別,...」)が付いているのであれば、`CSV::table` を使っても良いかもしれません。以下では質問文にある CSV データを `data.csv` としています(全て異なる年齢ですので、データの内容を水増ししています)。
|
2
2
|
|
3
3
|
```ruby
|
4
4
|
require 'csv'
|
@@ -6,13 +6,13 @@
|
|
6
6
|
table = CSV.read('data.csv', headers: true, converters: :numeric)
|
7
7
|
ranking = \
|
8
8
|
table.group_by{|g| g["性別"]}
|
9
|
-
.map{|gender, rows| [
|
9
|
+
.map{|gender, rows| [gender,
|
10
|
-
gender,
|
11
|
-
CSV::Table.new(rows, headers: table.headers)
|
10
|
+
CSV::Table.new(rows, headers: table.headers)
|
11
|
+
.group_by{|g| g["年齢"]}.map{|age, r| [age, r.count]}
|
12
|
-
|
12
|
+
.sort_by{|e| e[1]}.reverse[...3].collect(&:first)]}
|
13
13
|
|
14
14
|
p ranking
|
15
15
|
|
16
16
|
#
|
17
|
-
[["男", [
|
17
|
+
[["男", [39, 30, 58]], ["女", [61, 45, 34]]]
|
18
18
|
```
|