당신은 모든 조합이 필요하면 다음과 같이
stops = ["red_stop", "green_stop", "blue_stop", "yellow_stop", "purple_stop"]
stops.map.with_index { |s,i| [s,i] }
.combination(2).each_with_object({}) { |((s1,d1),(s2,d2)),h|
h[[s2,s1]] = h[[s1,s2]] = (d1-d2).abs }
#=> {["red_stop", "green_stop"] =>1, ["green_stop", "red_stop"] =>1,
# ["red_stop", "blue_stop"] =>2, ["blue_stop", "red_stop"] =>2,
# ["red_stop", "yellow_stop"]=>3, ["yellow_stop", "red_stop"] =>3,
# ["red_stop", "purple_stop"]=>4, ["purple_stop", "red_stop"] =>4,
# ["green_stop", "blue_stop"] =>1, ["blue_stop", "green_stop"] =>1,
# ["green_stop", "yellow_stop"]=>2, ["yellow_stop", "green_stop"] =>2,
# ["green_stop", "purple_stop"]=>3, ["purple_stop", "green_stop"] =>3,
# ["blue_stop", "yellow_stop"]=>1, ["yellow_stop", "blue_stop"] =>1,
# ["blue_stop", "purple_stop"]=>2, ["purple_stop", "blue_stop"] =>2,
# ["yellow_stop", "purple_stop"]=>1, ["purple_stop", "yellow_stop"]=>1}
단계
은을 :
b.to_a
#=> [[["red_stop", 0], ["green_stop", 1]],
# [["red_stop", 0], ["blue_stop", 2]],
# [["red_stop", 0], ["yellow_stop", 3]],
# [["red_stop", 0], ["purple_stop", 4]],
# [["green_stop", 1], ["blue_stop", 2]],
# [["green_stop", 1], ["yellow_stop", 3]],
# [["green_stop", 1], ["purple_stop", 4]],
# [["blue_stop", 2], ["yellow_stop", 3]],
# [["blue_stop", 2], ["purple_stop", 4]],
# [["yellow_stop", 3], ["purple_stop", 4]]]
: 우리는 배열에 열거
b
을 변환 할 수 있습니다
a = stops.map.with_index { |s,i| [s,i] }
#=> [["red_stop", 0], ["green_stop", 1], ["blue_stop", 2],
# ["yellow_stop", 3], ["purple_stop", 4]]
b = a.combination(2)
#=> #<Enumerator: [["red_stop", 0], ["green_stop", 1], ["blue_stop", 2],
# ["yellow_stop", 3], ["purple_stop", 4]]:combination(2)>
는 요소를 볼 수
각 쌍의 거리를 사용하여 해시를 만듭니다 (블록 변수의 분해가 아님). : 당신의 항목이 양방향으로 간주하는 경우 stops
당신의 예에서
b.each_with_object({}) { |((s1,d1),(s2,d2)),h|
h[[s2,s1]] = h[[s1,s2]] = (d1-d2).abs }
#=> {["red_stop", "green_stop"]=>1, ["green_stop", "red_stop"]=>1,
# ...
# ["yellow_stop", "purple_stop"]=>1, ["purple_stop", "yellow_stop"]=>1}
'stops.index ("purple_stop")을 계산하는 방법을 의미합니까? stops.index ("red_stop")'? –
예, a = stop.index ("purple_stop) b = stop.index ("red_stop ")는 a - b를 넣습니다 (그러나 Ruby 메서드로 쓰고 싶습니다) – mdror