【问题标题】:Data Array transferred to hash values and exporting the keys to an output file数据数组传输到哈希值并将键导出到输出文件
【发布时间】:2018-11-09 23:43:22
【问题描述】:

我有以下测试数据,需要使用 ruby​​ 编程导出为我想要的输出中显示的格式。真实数据数组有 1000000 条记录。

data_array1=aaaa
data_array2=bbbb
----------------
----------------
data_array8=hhhh , which means there are 8 data array, those have the following format :

aaaa= [a,[1,2,3,4],20]
bbbb= [b,[8,7,9,19],23]
-----------------------
-----------------------
hhhh= [h,[25,26,29,30],28]

我想要的输出需要导出到文本文件(标题仅供参考,无需包含在输出文件中):

输出.txt

哈希交易时间

a    1    20
a    2    20
a    3    20
a    4    20
b    8    25
b    7    25
b    9    25
b    19   25
------------
------------
h    25   28
h    26   28
h    29   28
h    30   28

我是 Ruby 的新手,到目前为止我已经这样做了,但还没有定论:

def bhash
  1.upto(8) do |bid|
    blk=[bid]

    keys = %w[hash tx time ]
    data = keys.map{|key| blk[key]}

    hash, txids, time, difficulty = data
    CSV.open('output.txt', 'w', headers: keys, write_headers: true, col_sep: 
    "\t") do |csv|
    txids.each do |tx|
      csv << [hash,tx,time]
    end
  end
end 

提前感谢您的所有帮助。

【问题讨论】:

  • 你是怎么调用这个函数的?您有一个名为 file 的参数,但您没有使用它。另外,[a,[1,2,3,4],20] 不是哈希,它是一个数组,其中的第二个元素是另一个数组。
  • 感谢@Tom。刚刚编辑了错误,你指出了。
  • 您至少缺少两个 end 语句。这个函数甚至不会像写的那样运行。它也没有使用任何数据。 data =.... 行将失败,因为您不能将字符串隐式转换为整数。这只是初学者。
  • 请提供您的建议,我的代码不确定,谢谢。
  • 如何将数据输入函数?数据从何而来? 1.upto(8) do |bid| 后跟blk=[bid] 表示blk 现在是一个数组,其中包含一个值为1 的元素。换句话说,在循环的第一次迭代中,blk=[1]。然后你尝试访问blk,就好像它是一个哈希一样,但它不是。

标签: ruby ruby-hash


【解决方案1】:

给定一个文件json.txt,内容如下:

["a",[1,2,3,4],20]
["b",[8,7,9,19],23]
["h",[25,26,29,30],28]

以下程序:

require 'csv'
require 'pp'
require 'json'

def custom_expansion(a)
  expanded = Array.new
  h = Hash.new
  h['hash'] = a[0]
  h['time'] = a[2]
  inside = a[1]
  inside.each do |tx|
    h['tx'] = tx
    expanded.push h.dup
  end
  expanded
end

CSV.open('output.txt', 'w', col_sep: "\t") do |csv|
  File.open('json.txt') do |f|
    while !f.eof?
      array = JSON.parse(f.readline)
      ex = custom_expansion(array)
      ex.each do |e|
        csv << [ e['hash'], e['tx'], e['time'] ]
      end
    end
  end
end

将在output.txt

a   1   20
a   2   20
a   3   20
a   4   20
b   8   23
b   7   23
b   9   23
b   19  23
h   25  28
h   26  28
h   29  28
h   30  28

【讨论】:

  • 完美运行!只有一个问题。您在编码中定义的测试数组可以在方法中定义吗?在我的问题中,有 8 个数据数组(aaaa,bbbb ....hhhh,尽管我只展示了三个)。是否可以在编码中定义一种方法,而不是在一个测试数组中仅累积 3 个数据数组?
  • 您会注意到我将变量test 设置为要操作的数据。但是,您是否执行此操作取决于您,无需更多信息。积累数据从哪里?请注意,扩展函数并不关心传递给它的数组中有多少元素。可以有 3、8 或 1,000 个。
  • 这是必需的,因为我有一系列数据数组(大约 1000000),我需要像您在测试数组中那样组合它们。所以,我需要一个方法来组合,然后调用custom_expansion方法。
  • 合并从哪里
  • data_array = [] data_array
猜你喜欢
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
相关资源
最近更新 更多