首页 > 解决方案 > Ruby 为控制器的数组动态命名

问题描述

我必须创建 28 个数组,命名如下:

all_questions_1 = []
all_questions_2 = []
...
all_questions_28 = []

我不想手动创建它们,所以我试图通过很多失败的尝试找出如何动态地创建它们。

我检查了前面的问题,但收效甚微。

Ruby 动态命名数组

Ruby 动态变量名

阅读评论后,我添加了关于我问这个问题的原因的附加解释

我要解决的是我在 Ruby_on_Railscontroller中遇到的一个问题,该问题是一个名为replies

动作如下:

def replies
    @project = Project.find(params[:project_id])
    @paper = Paper.find(params[:paper_id])
    @replies = Question.where("project_id = ? AND paper_id = ?", params[:project_id], params[:paper_id])
end

@replies返回一个长对象,其中包含项目中包含的每篇论文的所有回复。因此,一篇论文可以被多个用户回答。每篇论文都在一个项目中。每个项目包含几篇论文。(用户可以回答所有 28 个问题:NA、NO、MAYBE、YES,我将其翻译为“-1”、“0”、“0.5”、“1”)

这就是对象@replies给我的回报。 在此处输入图像描述

现在,一旦我有了它。我必须映射所有 28 个回复/问题。我想做以下事情。

@replies.map do |reply|
  all_question_1 << reply.question_1.to_i
end

我想做 28 次(有 28 个问题),这就是为什么我需要 28 个数组。我这样做是因为我希望将字符串的可能答案"-1", "0", "0.5", "1"更改为数字-1, 0, 0,5, 1

一旦这样做,我想为每个问题(all_question_1,all_question_2 ... all_question_28)计算包含-1或0或0.5或1的问题数量。

总结一下:

我需要构建以下代码 28 次,将 name_of_array_[NUMBER] 从 1 更改为 28:

all_question_1 = []

@replies.map do |reply|
  all_question_1 << reply.question_1.to_i
end

na_question_1 = all_question_1.count(-1)
no_question_1 = all_question_1.count(0)
maybe_question_1 = all_question_1.count(0.5)
yes_question_1 = all_question_1.count(1)

len_question_1 = all_question_1.length

我不想手动操作,所以我想知道是否有办法将 _NUMBER 从 1 动态更改为 28。

标签: ruby

解决方案


使用动态变量是我从未发现过的需要。您应该找到另一个数据结构来存储它们(例如,数组数组)。

例如,

all_questions_arrays = 28.times.map { |i| [i] }

print all_questions_arrays[20]
# => [20]

推荐阅读