0

解決策が見つからない特定の問題があります。テキストファイルから次の形式のデータを取得します

    date1 reason1
    date1 reason1
    date1 reason2
    date1 reason3
    date2 reason4
    date2 reason1
    date2 reason2
    date2 reason2
    date2 reason1
    date2 reason3
    date3 reason4
    date3 reason4
    date3 reason1

データの統計を作成したいたとえば、このように各日付からすべての異なる「理由」を数えたい

    date1 reason1 -> 2        
    date1 reason2 -> 1
    date1 reason3 -> 1
    date2 reason1 -> 2
    date2 reason4 -> 1
    date2 reason2 -> 2
    date1 reason3 -> 1

...等々。データを解析して必要な結果を構築するにはどうすればよいですか? ハッシュが使用されると思いますが、これを解決する方法を想像できませんでした。

4

3 に答える 3

2

これは非常に簡単なアプローチです。

h = Hash.new(0)
File.foreach("foo.txt") do |line|
  h[line.chomp] += 1  
end  
h
#=> {"date1 reason1"=>2,
 "date1 reason2"=>1,
 "date1 reason3"=>1,
 "date2 reason4"=>1,
 "date2 reason1"=>2,
 "date2 reason2"=>2,
 "date2 reason3"=>1,
 "date3 reason4"=>2,
 "date3 reason1"=>1}
于 2012-07-07T12:40:24.580 に答える
1
str = "date1 reason1
date1 reason1
date1 reason2
date1 reason3
date2 reason4
date2 reason1
date2 reason2
date2 reason2
date2 reason1
date2 reason3
date3 reason4
date3 reason4
date3 reason1"

line_counts = Hash.new(0)

str.lines.each do |line|
  line_counts[line.chomp] += 1
end

line_counts.each do |line, count|
  puts "#{line} -> #{count}"
end

出力:

date1 reason1 -> 2
date1 reason2 -> 1
date1 reason3 -> 1
date2 reason1 -> 2
date2 reason2 -> 2
date2 reason3 -> 1
date2 reason4 -> 1
date3 reason1 -> 1
date3 reason4 -> 2
于 2012-07-07T12:47:10.547 に答える
0
result = File.foreach("foo.txt").each_with_object(Hash.new(0)) do |line,h|
  h[line.chomp] += 1  
end  
#=> {"date1 reason1"=>2,
 "date1 reason2"=>1,
 "date1 reason3"=>1,
 "date2 reason4"=>1,
 "date2 reason1"=>2,
 "date2 reason2"=>2,
 "date2 reason3"=>1,
 "date3 reason4"=>2,
 "date3 reason1"=>1}
于 2012-07-07T13:30:17.540 に答える