你好,伙计们,我试图打印的元素的哈希到一个文件使用 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
所以有任何解决方案,不需要额外的数据,因为这只是一个原型,我打算与大文件的工作。
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