Ruby on rails 需要嵌套循环打印ruby中两个数组的值

Ruby on rails 需要嵌套循环打印ruby中两个数组的值,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有两个数组 ids = ["10.12.14","10.12.15"] iq = ["abc","pqr"] 我要下列格式的付款交单 New-IscsiTargetPortal -TargetPortalAddress 10.12.14 New-IscsiTargetPortal -TargetPortalAddress 10.12.15 Connect-IscsiTarget -NodeAddress abc -TargetPortalAddress 10.12.14 -IsPersist

我有两个数组

ids = ["10.12.14","10.12.15"]
iq = ["abc","pqr"]
我要下列格式的付款交单

New-IscsiTargetPortal -TargetPortalAddress 10.12.14
New-IscsiTargetPortal -TargetPortalAddress 10.12.15
Connect-IscsiTarget -NodeAddress abc -TargetPortalAddress 10.12.14 -IsPersistent $True
Connect-IscsiTarget -NodeAddress xyz -TargetPortalAddress 10.12.15 -IsPersistent $True
我的代码看起来像

for i in ids
  for j in iq
    puts "New-IscsiTargetPortal -TargetPortalAddress #{i}"
    puts "Connect-IscsiTarget -NodeAddress #{j} -TargetPortalAddress #{i} -IsPersistent $True"
  end
end
但它复制了i和j的值:

New-IscsiTargetPortal -TargetPortalAddress 10.12.14
Connect-IscsiTarget -NodeAddress abc -TargetPortalAddress 10.12.14 -IsPersistent $True
New-IscsiTargetPortal -TargetPortalAddress 10.12.14
Connect-IscsiTarget -NodeAddress pqr -TargetPortalAddress 10.12.14 -IsPersistent $True
New-IscsiTargetPortal -TargetPortalAddress 10.12.15
Connect-IscsiTarget -NodeAddress abc -TargetPortalAddress 10.12.15 -IsPersistent $True
New-IscsiTargetPortal -TargetPortalAddress 10.12.15
Connect-IscsiTarget -NodeAddress pqr -TargetPortalAddress 10.12.15 -IsPersistent $True

您能帮助我进行嵌套for循环或如何获得所需的o/p吗?

如果您可以依赖正在连接的两种数据(即10.12.14>“abc”),那么您可以在处理之前更好地组织数据,以使其更容易:

▶ result = ids.zip(iq).
▷   flat_map do |ip, name|
▷     ["New #{ip}", "Connect #{name} :: #{ip}"]
▷   end.partition { |s| s.start_with? 'New' }.flatten
#⇒ [
#  [0] "New 10.12.14",
#  [1] "New 10.12.15",
#  [2] "Connect abc :: 10.12.14",
#  [3] "Connect pqr :: 10.12.15"
# ]

▶ result.each(&method(:puts))
New 10.12.14
New 10.12.15
Connect abc :: 10.12.14
Connect pqr :: 10.12.15
h = [{
      target: "10.12.14",
      node: "abc"
    },
    {
      target: "10.12.15",
      node: "xyz"
    }]
接下来,您需要专门为目标地址(数组a)循环一次,以获得前两行,然后为组合信息行循环第二次,如下所示:

for o in h
  puts "New-IscsiTargetPortal -TargetPortalAddress #{o[:target]}"     
end

for o in h
  puts "Connect-IscsiTarget -NodeAddress #{o[:node]} -TargetPortalAddress #{i[:target]} -IsPersistent $True"
end

对于第一部分,您可以迭代
ids

ids.each do |i|
  puts "New-IscsiTargetPortal -TargetPortalAddress #{i}"
end
对于第二部分,您可以使用以下命令成对组合
ids
iq

输出:

New-IscsiTargetPortal -TargetPortalAddress 10.12.14
New-IscsiTargetPortal -TargetPortalAddress 10.12.15
Connect-IscsiTarget -NodeAddress abc -TargetPortalAddress 10.12.14 -IsPersistent $True
Connect-IscsiTarget -NodeAddress pqr -TargetPortalAddress 10.12.15 -IsPersistent $True

使用
带有索引的每个\u
,并使用第一个数组的索引确定要在第二个数组上检索的元素

ids.each_with_index do |id, index|
    puts "New-IscsiTargetPortal -TargetPortalAddress #{id}"
    puts "Connect-IscsiTarget -NodeAddress #{iq[index]} -TargetPortalAddress #{id} -IsPersistent $True"
  end
end

@mudasobwa感谢您发现了这一点,最近与js合作太多了。感谢您的帮助,这很有帮助。我相信“xyz”应该是“pqr”。
ids.each_with_index do |id, index|
    puts "New-IscsiTargetPortal -TargetPortalAddress #{id}"
    puts "Connect-IscsiTarget -NodeAddress #{iq[index]} -TargetPortalAddress #{id} -IsPersistent $True"
  end
end