【问题标题】:Using define_method to generate dynamic array names in Ruby在 Ruby 中使用 define_method 生成动态数组名
【发布时间】:2016-08-11 18:17:32
【问题描述】:

我试图弄清楚如何使用define_method(或任何其他方法)生成数组名称,因为我的方法循环遍历数组并将每个散列元素转换为JSON。现在,我的数据是一系列哈希数组,只是转储到一个文件中,不包含在任何更大的数组中。

data_arrays = [{"key1":"value1"}, {"key2":"value2"}]
       [{"key3":"value3"}, ("key4":"value4")]
       [{"key5":"value5"}, ("key6":"value6")]

我尝试使用的代码如下所示。基本上,我希望将每个哈希数组转换为 JSON 并分配一个新名称,如 json_array_1、jason_array_2 等。

data_arrays.each do |element|
    for (i = 0; i < data_array.length; i+=1) do
        define_method("json_array_#{i}") do
            json_array_[i] = element.to_json
        end
    end
end

我知道这一行:for (i = 0; i &lt; data_array.length; i+=1) do 根本不是真正的 Ruby 或好的代码。但是我需要一种方法来遍历循环,同时使变量“i”可以插入到 json_array 名称中。任何人都可以给我任何让这段代码工作的指示吗?我可能想太多了,让事情变得比实际更难。

【问题讨论】:

  • 您的问题表述得不够清楚,所以我只能在一些小事上提供帮助。 (1) 获取数组索引使用data_arrays.each_with_index do |element, i| (2) 动态调用方法使用send("json_array_#{i}=", element.to_json)
  • 您对data_arrays 的定义有几个错误。看看我在回答中是如何定义的。

标签: arrays ruby loops


【解决方案1】:
data_arrays.each_with_index do |element, i|
  define_method("json_array_#{i}") do
    element.to_json
  end
end

这将定义方法json_array_0json_array_1... 如果您想从 `json_array_1 开始,请设为 "json_array_#{i + 1}"

【讨论】:

  • 感谢您的建议。但是,这对我来说似乎根本不起作用。没有实际运行。
【解决方案2】:
data_arrays = [[{key1:"value1"}, {key2:"value2"}],
               [{key3:"value3"}, {key4:"value4"}],
               [{key5:"value5"}, {key6:"value6"}]]
require 'json'

json_strings = data_arrays.map { |a| a.map { |h| h.to_json } }
  #=> [["{\"key1\":\"value1\"}", "{\"key2\":\"value2\"}"],
  #    ["{\"key3\":\"value3\"}", "{\"key4\":\"value4\"}"],
  #    ["{\"key5\":\"value5\"}", "{\"key6\":\"value6\"}"]]

or

json_strings = data_arrays.flat_map { |a| a.map { |h| h.to_json } }
  #=> ["{\"key1\":\"value1\"}", "{\"key2\":\"value2\"}", "{\"key3\":\"value3\"}", 
  #    "{\"key4\":\"value4\"}", "{\"key5\":\"value5\"}", "{\"key6\":\"value6\"}"] 

depending on your needs.

【讨论】:

  • 我看到您将 data_arrays 放在它自己的更大数组中。但是,我正在使用一个文件,该文件生成为三个单独的哈希数组,中间没有逗号。当我尝试将散列数组推入更大的数组时,我总是以字符串结尾。我不太确定为什么会发生这种情况,尽管我同意如果 data_arrays 已经包含在更大的数组中会容易得多。
  • 我不明白。你是说这些是文件中的文本字符串吗?如果是这样,请编辑您的答案以说明并将字符串放在引号中。此外,将 data_arrays 设置为不是 Ruby 对象的东西是没有意义的。
猜你喜欢
  • 1970-01-01
  • 2011-02-17
  • 2011-01-19
  • 2023-04-02
  • 1970-01-01
  • 2014-09-14
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多