打印哈希元素到文件

问题描述 投票:0回答:1

你好,伙计们,我试图打印的元素的哈希到一个文件使用 table-print 然而这 tp 将打印每一个键在一列中,但我想要的是有所有的 keys 在一个名为 words 和另一列名为 num.

所以这是我到现在为止写的东西。

class Xclass
  require 'table_print'
  attr_accessor :dic

  def initialize()
    @dic = { apple: 1, water: 2 , orange: 3 }
  end
  def getkeys
    dic.keys.sort.each do |key|
      return key
    end
  end
  def getvalue
    dic.values.sort.each do |value|
      return value
    end
  end
  def nice

    f = File.open("users.txt", "w")
    tp.set :io, f
    #tp [dic], words:getkeys , num:getvalue #just a helpless try generate the same error but `merge' for :apple:Symbol
    tp [dic], words:dic.keys  , num:dic.values
  end
end

Xclass.new().nice()

但这段代码产生了以下错误:

         10: from table.rb:27:in `<main>'
     9: from table.rb:23:in `nice'
     8: from /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print.rb:73:in `tp'
     7: from /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print.rb:34:in `table_print'
     6: from /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print.rb:65:in `columns'
     5: from /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print.rb:65:in `new'
     4: from /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print/config_resolver.rb:13:in `initialize'
     3: from /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print/config_resolver.rb:41:in `process_option_set'
     2: from /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print/config_resolver.rb:41:in `collect'
     1: from /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print/config_resolver.rb:41:in `block in process_option_set'
     /var/lib/gems/2.5.0/gems/table_print-1.5.6/lib/table_print/config_resolver.rb:66:in `option_to_column': undefined method `merge' for [:apple, :water, :orange]:Array

可能的解决方案,但成本很高

我可以写这样的东西,但

  def nicePrintToFile(f)
    i=0
    product = Struct.new(:words,:occurances)
    products=Array.new(self.hash.size)
    self.hash.keys.sort.each do |key|
      products[i+=1]=product.new(key, self.hash[key])
    end
    tp.set :io, f
    tp products
  end

所以有任何解决方案,不需要额外的数据,因为这只是一个原型,我打算与大文件的工作。

ruby file hash printing
1个回答
0
投票

table_print 在单个哈希值上不怎么管用,但在一个哈希值数组上就很管用了。 比如说,在这个例子中,所有的键都是跨列的。

> tp [{foo: "foo1", bar: "bar1"}, {foo: "foo2", bar: "bar2"}]
FOO  | BAR
-----|-----
foo1 | bar1
foo2 | bar2

在这个例子中,键是在顶部。 如果你想打印一个键在下面的哈希值,你需要以某种方式将其转置成一个数组。 例如:在这个例子中,键值是横在上面的,你需要以某种方式将其转置成一个数组。

> dic = { apple: 1, water: 2 , orange: 3 }
> tp dic.to_a.map{|k,v| {word: k, num: v}}
WORD   | NUM
-------|----
apple  | 1
water  | 2
orange | 3
© www.soinside.com 2019 - 2024. All rights reserved.