2014-10-28 2 views
1

에있는 요소의 모든 조합 나는 3 개 루비 배열이이 개 루비 배열

combination = ['jack wants blue','jack wants green','jack wants yellow','jill wants blue','jill wants green','jill wants yellow'] 

어떻게해야하는지 알 수 없습니다.

name.each do |name| 
    puts "#{name} wants #{color}" 
end 
+1

답변 선택의 급한 점은 무엇입니까? 빠른 선택은 다른 답변을 방해하는 경향이 있으며 greenie가 깜박일 때 응답을 준비하는 사람들에게는 허술합니다. –

+0

@CarySwoveland - 죄송합니다. 그건 분명히 내 의도가 아닙니다. 테스트를 거쳐 내 필요에 맞게 작동 했으므로 신속하게 선택한 경우 더 많은 혜택을 얻을 것이라고 생각했습니다. – HKBR1907

+0

사과 할 필요가 없습니다. 대답을 선택하기 전에 얼마나 오래 기다려야하는지에 대한 의견이 다릅니다. 그래서 새로 입문 한 사람들은 그것에 대해 정말로 생각해 보지 않았으며 좋은 대답에 대한 감사를 표하는 것을 염려합니다. btw, 나는 대답을 준비하고 있었다는 것을 암시하지는 않았다. (나는 아무 것도 쓸모가 없었다.) –

답변

8

사용할 수 Array#product : :이로 시작 없지만 아무 소용이 시도했습니다

names = ['jack', 'jill'] 
colors = ['blue', 'green', 'yellow'] 

names.product(colors).map { |name, color| "#{name} wants #{color}" } 
#=> ["jack wants blue", "jack wants green", "jack wants yellow", "jill wants blue", "jill wants green", "jill wants yellow"] 
+1

또는'names.product (colors) .map {| arr | arr.join ("wants")}'만약 당신이 표시하고 보간하고 싶지 않다면. –

0
names = ['jack', 'jill'] 
colors = ['blue', 'green', 'yellow'] 
# Note - renamed to "colors" plural 
names.collect { |name| colors.collect { |color| "#{name} wants #{color}" } }.flatten 

=> ["jack wants blue", "jack wants green", "jack wants yellow", "jill wants blue", "jill wants green", "jill wants yellow"] 
2
보간 다른 답변에서와 같이 작동합니다,하지만 난 더 나은 문자열 형식을 좋아

이런 경우. freeze 방법은 최적화를위한 방법입니다. 그것 없이도 작동합니다.

names.product(colors).map{|a| "%s wants %s".freeze % a} 
+1

+1. 주문이 중요하지 않은 경우 +1을 사용합니다. ' "% s 대 % s" – Stefan