【问题标题】:Cleanest way to iterate through a loop in Ruby, while outputting two values?在输出两个值的同时迭代 Ruby 中的循环的最简洁方法?
【发布时间】:2021-11-25 20:26:33
【问题描述】:

我有一个简单的循环,它输入一个包含多个元素的数组,我的函数的目标是遍历每个元素,ID 的值与当前循环中元素的 ID 相同 并且 'body' 的值是整个相同元素的值。

我正在努力确保循环在每次迭代时重置并输入一个新元素,而不是循环中剩余的一个或另一个。

实现这一目标的最佳方法是什么?

@data = [{ 'url' => 'https://zendesk.com/api/v2/macros/1900002708354.json',
           'id' => 1_900_002_708_354,
           'actions' => [{ 'field' => 'comment_value_html', 'value' => '{{email}} 360081752739' }],
           'restriction' => nil },
         { 'url' => 'https://zendesk.com/api/v2/macros/360081752739.json',
           'id' => 360_081_752_739,
           'actions' => [{ 'field' => 'comment_value_html', 'value' => '{{IBAN}} ' }],
           'restriction' => nil },
         { 'url' => 'https://zendesk.com/api/v2/macros/360081755559.json',
           'id' => 360_081_755_559,
           'actions' => [{ 'field' => 'comment_value_html', 'value' => '{{email}} 360081752739' }],
           'restriction' => nil }]





def run_function
  @data.each do |x|
    @id = [x.select { |m| m['id'] }]
    final_data = x
    body = final_data
    puts body
  end
 end

我的 ID 变量当前输出为 [{"id"=>1900002708354}],而我只需要数字。

【问题讨论】:

  • 看在上帝的份上,请正确缩进代码。否则代码将无法扫描。
  • 在这种特殊情况下,each 的正文应该缩进一级。
  • @SergioTulentsev 好的。对吗?
  • 完美。现在,我对代码有疑问。不确定你试图用@data.select { |m| m['actions'] }.map { |m| m['id'] } 做什么,但它肯定不是你认为的那样。在每次迭代时,它将具有相同的值(所有 id 的列表)。特别是,.select { |m| m['actions'] } 是无用的(给定提供的输入数组)
  • @cbin1 :由于@data 是一个哈希数组,x 必须是一个哈希。将select 应用于哈希有什么意义?

标签: ruby-on-rails ruby loops


【解决方案1】:
@data.each do |hash|
  id = hash['id']
  puts id
end

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 2011-03-21
    • 1970-01-01
    • 2013-02-11
    • 2015-09-03
    • 2018-04-09
    • 1970-01-01
    • 2013-07-06
    • 2014-01-26
    相关资源
    最近更新 更多