2013-11-12 1 views
0

Я пытаюсь объединить два массива, когда есть ключевое совпадение.Добавить значение массива из массива 1, если совпадение ключей в массиве Array2 (Ruby)

Массив «mac» должен соответствовать «id [0]», и если соответствие истинно, добавьте значение «id [1]» в мой «ip».

Для этого примера будет использовать «компьютер», «IP-адрес» и «MAC-адрес»

id = { 
    '01:02:03:04:05:06' => 'Desktop' 
    '07:08:09:10:11:12' => 'Laptop' 
} 

ip = { '192.168.0.10', '192.168.0.20' } 
mac = { '01:02:03:04:05:06', '07:08:09:10:11:12' } 

код, я использую до сих пор;

net = ip.zip(mac) 
net.each do |ip,mac| 
    puts "#{ip}/#{mac}" 
end 

Пример вывода (желательные):

192.168.0.10/01:02:03:04:05:06/Desktop 
192.168.0.20/07:08:09:10:11:12/Laptop 
+0

Tux, несколько наблюдений: 1. 'ip' и' mac' являются массивами, поэтому заключите в них '[]', а не '{}' (plz edit); 2. путать с блочными переменными (локальными) те же имена, что и массивы 'ip' и' mac'; 3. вы можете цепью, чтобы избежать необходимости в временной переменной 'net' (т. Е.' Ip.zip (mac) .each {| i, m | puts ...} '); 4. Элементы хэша не могут быть идентифицированы с индексами ('id [0]' - это значение, соответствующее ключу '0', или' nil', если нет ключа '0'), поэтому вместо этого скажем что-то вроде:« для заданный элемент 'm'' mac', если 'id' содержит элемент с ключом' m', затем добавьте 'id [m]' to ... ". –

ответ

2

В вашем примере id (переименовать его в hostnames) является Hash, а не массив, таким образом, вы можете посмотреть на лету и изменить строку с puts на:

puts "#{ip}/#{mac}/#{id[mac]}" 

Не уверен, если это соответствует вашему вопросу и требования. Если да, пожалуйста, измените заголовок вопроса (поиск хэша).

+0

Я переименую его на «хозяин», но ваш пример работал :-) Спасибо! – Tux

+0

Я был напуган, пока не щелкнул, что вы заменяете только одну строку кода опроса. В зависимости от того, что означает «если есть соответствие», может быть, 'puts '# {ip}" + (id [mac]? "/ # {Mac}/# {id [mac]}": "") '. –

Смежные вопросы