哈希值为哈希或数组 Ruby
hash with values as Hash or Array Ruby
我正在尝试对某些记录集进行分组,但这样做的效率很可能很低。需要帮助 -
首先,我从一堆处理过的文件中收集了以下数据集 -
BookA - section1, section2
BookB - section2, section4
我用了 hh = Hash.new{|h,k| h[k] = {}} 并将其存储为 -
hh[BookA][section1] = BookA
hh[BookA][section2] = BookA
hh[BookB][section2] = BookB
hh[BookB][section4] = BookB
但我需要按以下方式打印所有这些 -
section1 - BookA
section2 - BookA
section2 - BookB
section4 - BookB
关于如何执行此操作的任何建议....
所以我创建了
h = Hash.new{|h,k| h[k]=[]}
section_hash = Hash.new([])
迭代 -
h.each 做 |k,v|
v.each 做 |s|
放“#{s} - #{k}”
fh[s] << k
结束
结束
放 fh
它正确打印所有内容,但 fh 为零,知道出了什么问题......
puts 命令的输出
s1 - b1
s2 - b1
s2 - b2
我会像这样使用该部分作为散列键来做到这一点:
# so this will create a new empty array for any keys we add
section_hash = Hash.new([])
# you can grab out the lines of the file or use each to do it line by line.
book_lines = File.readlines("my_file.txt")
# now go through each of these and add the data into the hash
book_lines.each do |line|
# convert each line to a key/value pair
# eg "BookA - section1, section2"
# {"BookA" => ["section1", "secton2"]}
book, sections = line.split(" - ")
sections = sections.split(', ')
# and hash away these values
sections.each do |section|
section_hash[section] << book
end
end
然后您可以打印:
section_hash.each do |section, books|
# you may choose to uniq (in case of double ups)
books.uniq.each do |book|
puts "#{section} - #{book}"
end
end
我正在尝试对某些记录集进行分组,但这样做的效率很可能很低。需要帮助 -
首先,我从一堆处理过的文件中收集了以下数据集 -
BookA - section1, section2
BookB - section2, section4
我用了 hh = Hash.new{|h,k| h[k] = {}} 并将其存储为 -
hh[BookA][section1] = BookA
hh[BookA][section2] = BookA
hh[BookB][section2] = BookB
hh[BookB][section4] = BookB
但我需要按以下方式打印所有这些 -
section1 - BookA
section2 - BookA
section2 - BookB
section4 - BookB
关于如何执行此操作的任何建议....
所以我创建了
h = Hash.new{|h,k| h[k]=[]}
section_hash = Hash.new([])
迭代 -
h.each 做 |k,v|
v.each 做 |s|
放“#{s} - #{k}”
fh[s] << k
结束
结束
放 fh
它正确打印所有内容,但 fh 为零,知道出了什么问题......
puts 命令的输出
s1 - b1
s2 - b1
s2 - b2
我会像这样使用该部分作为散列键来做到这一点:
# so this will create a new empty array for any keys we add
section_hash = Hash.new([])
# you can grab out the lines of the file or use each to do it line by line.
book_lines = File.readlines("my_file.txt")
# now go through each of these and add the data into the hash
book_lines.each do |line|
# convert each line to a key/value pair
# eg "BookA - section1, section2"
# {"BookA" => ["section1", "secton2"]}
book, sections = line.split(" - ")
sections = sections.split(', ')
# and hash away these values
sections.each do |section|
section_hash[section] << book
end
end
然后您可以打印:
section_hash.each do |section, books|
# you may choose to uniq (in case of double ups)
books.uniq.each do |book|
puts "#{section} - #{book}"
end
end