我如何在ruby中循环数组?

时间:2012-08-29 21:06:06

标签: ruby loops

嗨,我刚刚开始学习ruby,我正在尝试遍历我创建的数组,如下所示:

server[0] = ['hostname' => 'unknown01', 'ip' => '192.168.0.2', 'port' => '22']
server[1] = ['hostname' => 'unknown02', 'ip' => '192.168.0.3', 'port' => '23']
server[2] = ['hostname' => 'unknown03', 'ip' => '192.168.0.4', 'port' => '24']

我尝试使用此代码:

i=0
server[i].each do |x|
    print x['hostname']
    print x['ip']
    i+=1
end

但它只通过服务器[0]循环我如何循环通过服务器[0-3]

3 个答案:

答案 0 :(得分:5)

您根本不需要使用i,只需执行此操作:

server.each do |x|
    print x['hostname']
    print x['ip']
end

答案 1 :(得分:1)

您正在做的是将i设置为0,因此当您转到server[i].each时,您正在呼叫server[0].each。即使你增加i,也不会改变你所枚举的内容。正确的代码是:

server.each

枚举server中的每个元素。

答案 2 :(得分:0)

这可能不是你认为的那样。由于您将键/值对放在方括号内,因此它最终成为一个哈希的数组(其他语言称为地图和词典)。可能你想用大括号交换方括号,如下所示:

servers = []
servers[0] = {'hostname' => 'unknown01', 'ip' => '192.168.0.2', 'port' => '22'}
servers[1] = {'hostname' => 'unknown02', 'ip' => '192.168.0.3', 'port' => '23'}
servers[2] = {'hostname' => 'unknown03', 'ip' => '192.168.0.4', 'port' => '24'}

但是,由于你只是按索引设置每一个,你不需要以这种方式构建它,你可以将它们放在数组中各自的位置。

servers = [
  {'hostname' => 'unknown01', 'ip' => '192.168.0.2', 'port' => '22'},
  {'hostname' => 'unknown02', 'ip' => '192.168.0.3', 'port' => '23'},
  {'hostname' => 'unknown03', 'ip' => '192.168.0.4', 'port' => '24'},
]

然后迭代你可以做的每一个:

servers.each do |server|
  puts server['hostname']
  puts server['ip']
  puts
end