2009-11-01 1 views
4

이 내가 나이를 가지고는 그것의 가장 큰 정수를 추출하고 인덱스 위치를 배울 수있는 방법을 적용하려면 어떻게 지금까지배열에서 정수/최대 정수를 찾아서 어떻게 루비를 찾고 색인 된 위치를 반환합니까?

ages = [20,19,21,17,31,33,34] 
names = [Bob, Bill, Jill, Aimee, Joe, Matt, Chris] 

을 것입니다. 이름에있는 사람이 가장 오래된 사람인지 알고 싶기 때문입니다. 병렬 할당은 이름과 연관된 요소의 위치를 ​​변경하기 때문에 배열에서 .sort를 수행하는 기능을 차단합니다.

답변

3
names[ages.index(ages.max)] 

는 그것이 무엇을하는 (ages.max), 시대의 첫 번째 일치하는 값의 인덱스를 얻을 시대의 최대 값을 찾을 것입니다, 감사 궁리하고 그것을 사용하는 코드를 기입하십시오 해당 사람을 찾으십시오. 두 명 이상의 사람들이 같은 나이를 가졌다면 배열의 첫 번째 이름 만 알 수 있습니다.

편집 : 의견을 말하기 위해 필자는 왜이 병렬 배열 구조가 필요한지 잘 모르겠다. (사람 개체를 가지고 있다면 훨씬 쉬울 것이다.)

indices = [] 
ages.each_with_index { |age, i| indices << i if age < 20 } 
indices.each { |i| puts names[i] } 
+0

흠 (20)는 여전히 다른 물건을 시도하고 약 1 시간 후 어둠 속에서 나를 잎처럼 다음 분 또는 최대 다른 값을 결정하려고 : 그럼에도 불구하고, 당신은 뭔가를 시도 할 수 있습니다. 내가하려는 일을 열심히한다. 20보다 적은 모든 연령 값을 찾습니다. 색인 된 요소 위치를 가져 와서 20 이하의 값에 대한 이름을 반환합니다. 연령 = [20,19,21,17,31,33,34] 이름 = [Bob, Bill, Jill, Aimee , Joe, Matt, Chris] 이렇게 생각하세요 : puts names [ages.each_index {| n | n <20}] 나는 내부 이름이 잘못된 것을 반환합니다. 출력은 Bob, Bill, Aimee 여야합니다. 병렬 어레이에 도움 감사 매트 – Matt

+0

흠 .. 그 코드의 문제는 20 인덱스를 비교하는 each_index 사용하고, 그것으로 아무것도하지 그래피 (each_index 그냥 각 인덱스 전달 블록을 실행하도록하고, 귀하의 블록은 부작용없이 참 또는 거짓으로 평가됩니다). 또한 each_index는 배열을 반환하므로 배열을 다른 배열의 인덱스로 사용할 수 없습니다. 나는 Bob이 20이고 20이 20보다 적지 않기 때문에 원하는대로 할 수있는 코드로 내 대답을 업데이트했습니다 (Bill과 Aimee 만 인쇄합니다). –

관련 문제