【问题标题】:Ruby on Rails: iterating through array with specific index?Ruby on Rails:遍历具有特定索引的数组?
【发布时间】:2013-04-14 20:00:20
【问题描述】:

如果我有特定的索引,如何遍历数组?

@lv = {'apple' => ['round', 'red'], 'name' => ['tags', 'more tags']}

if params[:value]
    @lv.each do |key, tags|
        if params[:value] == key
            tags.each_with_index do |tag, index|
                ... should display round and red?
            end
        end
    end
end

我有一个数组@lv,如果有与之关联的参数,我希望能够获取这些值。示例:

someURL.com/?value=0 那么这应该得到密钥apple。我想从apple 获取值,应该是roundred。我在上述代码中的逻辑是错误的,但我想弄清楚调用正确键进行迭代的语法是什么?

【问题讨论】:

  • 这毫无意义; @lv 是一个映射,而不是一个数组。在地图上使用数字索引很奇怪。
  • @DaveNewton 我是 Rails 新手,当我将它用作变量或某种变量时,它似乎正在工作,将 @ 去掉更好吗?
  • 是实例还是局部变量与问题无关。
  • 您好 Andrew,请告诉我您要达到的目标,我可以建议一个替代解决方案。你如何生成@lv,为什么......以及为什么你在 URL 中传递索引而不是实际所需的键(即苹果)

标签: ruby-on-rails ruby arrays loops


【解决方案1】:

这毫无意义; @lv 是一个映射,而不是一个数组。在地图上使用数字索引很奇怪。

可以依赖 Ruby 1.9+ 中的插入顺序,因此 @lv[@lv.keys[params[:value].to_i]] 实际上会检索您想要的内容,但 IMO 它在语义上是粗略的。

@lv[@lv.keys[params[:value].to_i]].each_with_index do |tag, index|
  ...
end

我还建议使用至少一个中间变量来清理该表达式。

【讨论】:

  • 能举一个替代的例子吗?
  • @andrewliu 做“正确”取决于你实际在做什么,以及为什么,我不知道。
  • 你能解释一下你的代码是做什么的吗?对不起,我真的是 Ruby on Rails 的新手
  • @andrewliu 逐个表达式分解:它使用参数的整数值作为哈希键的数组索引来获取键,然后使用该键从hash,然后遍历散列值,假设是一个数组。
【解决方案2】:

要让它以这种方式工作似乎需要付出很多努力。为什么不更改视图以便您可以选择键名:

http://example.com/?value=apple 而不是http://example.com?value=0

然后您可以将控制器代码更改为:

@tags = @lv[params['value']]

然后在您的视图中遍历@tags,或者您尝试对标签列表执行的任何其他操作。

【讨论】:

  • 我尝试测试puts @lv[params['apple']],但没有任何结果,puts @lv[params[0]] 也没有。获取类似于params[0] 的正确语法是什么?我想根据索引输出值。因此,如果我想从苹果获取值,我需要在某处传递0。我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多