Ruby - создание комбинации из двух массивов * вызывает головную боль * - PullRequest
0 голосов
/ 15 декабря 2010

То, что я пытаюсь сделать, это взять массив имен сервисов и применить к каждому ответу сервиса либо true, либо false.

В основном я получаю XML с набором логических значений для каждогоиз проверенных услуг.Таким образом, для этого примера все они вернулись как истина.

Я поместил их в массив, используя Nokogiri, например:

doc = Nokogiri::XML.parse(xml)
service_state = doc.css("HeartBeat Status").map(&:text)

В результате получается массив с 3 ["истинными"] элементами.
Мне нужно последовательно применить каждый из них с массивом, который есть в коде.

name = ['svc1', 'svc2', 'svc3']

Для этого я использовал следующий код:

status = [] ; service_state.each {|n| name.each {|l| status << [l,n]}}
status.each {|state| print state.to_s + "\n"}

Это делает то, что я хочу ... вроде ...

Я получаю вывод:

["svc1", "true"] ["svc2", "true"]["svc3", "true"]

Однако повторяются все возможные комбинации.При применении этого к фактическому массиву у меня есть в общей сложности 13 сервисов, которые имеют ответ 17 раз, поэтому я получаю массив с 221 элементом.

Вопрос: Как мне сделать то, что я делаю сейчас, но без повторения для каждого элемента в обоих массивах?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 15 декабря 2010

Звучит так, как вы хотите использовать Array # zip

name = ['svc1', 'svc2', 'svc3']
status = ['true', 'true', 'true']

name.zip(status)
#=> [['svc1','true'], ['svc2','true'], ['svc3','true']]
1 голос
/ 15 декабря 2010
name.zip service_state 
0 голосов
/ 15 декабря 2010

Я искал гораздо более сложный ответ, чем мне нужно.

Этот фрагмент дал мне то, что мне было нужно. : P

status = [] ; service_state.each {|n| name.each {|l| status << [l,n]}}
status = status.uniq
status.each {|state| print state.to_s + "\n"}
...