0

嗨,我刚开始学习 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]

4

3 回答 3

5

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

server.each do |x|
    print x['hostname']
    print x['ip']
end
于 2012-08-29T21:10:10.697 回答
1

您正在做的是设置i0,所以当您到达 时server[i].each,您正在调用server[0].each。即使你增加i它并不会改变你枚举的内容。正确的代码是:

server.each

枚举server.

于 2012-08-29T21:13:11.743 回答
0

This probably isn't doing what you think it is. Since you're putting your key/value pairs inside of square brackets, it winds up being an array of one hash (other languages call them maps and dictionaries). Probably you want to exchange your square brackets with curly brackets like this:

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'}

But since you're just setting each one by its index, you don't need to build it up this way, you can just place them in their respective positions within the array.

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'},
]

Then to iterate over each one you can do:

servers.each do |server|
  puts server['hostname']
  puts server['ip']
  puts
end
于 2012-08-29T21:38:14.107 回答