#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'csv' sum = Hash.new(0) # デフォルト値0の指定で sum["身長"]などは0が初期値 sntw = CSV.read("sntw.csv", headers:true) sntw.each do |row| uid, name = row["出席番号"], row["氏名"] height, weight = row["身長"].to_f, row["体重"] sum["身長"] += height.to_f sum["体重"] += weight.to_f printf("データ確認: %s\n", name) end # 出席番号による検索 print "出席番号一覧:" puts sntw["出席番号"].join(" ") print "知りたい出席番号?: " sid = gets.chomp if sid > "" st = sntw.select{|x| x["出席番号"] == sid}[0] # selectで得られるのは配列なので [0] で先頭要素を取り出す if st then # 何か見つかったらnilでないものが入るはず printf("ID:%s %-20s 身長:%8.1f 体重:%5.1f\n", sid, st["氏名"], st["身長"].to_f, st["体重"].to_f) end else puts("該当なし") end # 身長か体重か begin print "ソート基準: 0=身長、1=体重? (0 or 1): " s = gets.to_i end while s<0 || s>1 kijun = ["身長", "体重"][s] # 降順に並べ替えた結果を変数に保存しておく sorted = sntw.sort_by {|x| x[kijun]}.reverse sorted.each do |i| printf("%-14s\t:H=%.2f\tW=%.2f\n", i["氏名"], i["身長"], i["体重"]) end # 「最も少ない」は配列の最後(添字-1)に入っている printf("%sの最小値は%.2fです\n", kijun, sorted[-1][kijun])