哈希值为哈希或数组 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