ヘッダーとその値からなるテキストをhashにしたい(出来るだけ参照が残るローカル変数なく)
こういうテキストを
list.txt
[header1]
abc
def
[header2]
xxx
yyy
[header3]
123
456
rubyでこういうhashにしたい
{
"[header1]" => ["abc", "def"],
"[header2]" => ["xxx", "yyy"],
"[header3]" => ["123", "456"],
}
現状
ruby-2.7.1
require "active_support/all"
key = nil # => これが嫌だ
Pathname("./list.txt").readlines.collect(&:strip).group_by do |line|
key = line if line.start_with?("[")
key
end.to_h do |key, values|
[key, values[1..-1].delete_if(&:blank?)]
end
# => {"[header1]"=>["abc", "def"], "[header2]"=>["xxx", "yyy"], "[header3]"=>["123", "456"]}
現在のスコープでkey
が参照できてしまうのを無くしたい。且つ、なんかもっと良いやり方があるに違いない!
0