2015-02-06 2 views
-1

블록의 인덱스를 참조하면서 배열의 특정 요소를 조작하려고합니다. 전체 배열에 운영하는 것은 쉽다인덱스를 변경하지 않고 배열 요소를 조작하십시오.

arr = [1, 2, 3, 4, 5, 6, 7, 8] 
arr.each_with_index { |num, index| puts "#{num}, "#{index}" } 

하지만 요소 4로 바로 작업 할 경우 6

4, 3 

6, 5 

를 반환 내가 원래의 특정 요소로 구성된 새 배열을 만들 수 있으며, 그 위에서 블록을 실행하면 인덱스가 변경됩니다.

요소 및 색인은 어떻게 선택합니까?

+0

귀하의 코드가 잘못되었습니다. – sawa

답변

0

그냥 거기에 조건을 넣어 :이 다른 스타일

indice = [3, 5] 
arr.each_with_index do 
    |num, index| puts "#{num}, #{index}" if indice.include?(index) 
end 

:

indice = [3, 5] 
arr.each_with_index do 
    |num, index| 
    next unless indice.include?(index) 
    puts "#{num}, #{index}" 
end 
+0

그게 효과가! 감사. – sarkon

0
당신이 배열에 값을 부여하고 그들의 인덱스를 가져올 여부를 제가 질문에서 말할 수

, 혹은 그 반대로도. 그러므로 나는 각 작업마다 하나의 방법을 제안 할 것이다. 나는 예는이 배열을 사용합니다 :

arr = [1, 2, 3, 4, 5, 6, 7, 8] 

값을 지수

로이 값을 제공하는 경우 :이 같은 숫자 인덱스 쌍을 검색 할 수 있습니다

vals = [4, 6] 

:

vals.map { |num| [num, arr.index(num)] } 
    #=> [[4, 3], [6, 5]] 

또는 직접 인쇄 :

vals.each { |num| puts "#{num}, #{arr.index(num)}" } 
# 4, 3 
# 6, 5 
#=> [4, 6] 

vals의 요소가 존재하지 arr의 경우 : 값에

vals = [4, 99] 
vals.map { |num| [num, arr.index(num)] } 
    #=> [[4, 3], [99, nil]] 

지수

당신이 주어지면 지수 :

indices = [3, 5] 

당신이 검색 할 수 있습니다 t와 같은 인덱스 - 값 쌍 그의 :

indices.zip(arr.values_at(*indices)) 
    #=> [[3, 4], [5, 6]] 

그런 다음 원하는 형식으로 인쇄하십시오.

이 범위를 벗어난, nil가 반환됩니다 인덱스가되어있는 경우 :

indices.zip(arr.values_at(*[3, 99])) 
    #=> [[3, 4], [5, nil]] 
+0

예! 이런 해결책이 있어야한다고 생각했습니다. 고맙습니다. – sarkon

+0

나는 좀 더 일반적인 해결책이 필요하다고 생각한다. 이것은 내가 작업하고자하는 원소의 값을 알고있는 경우에만 작동합니다. 그러나 만약 a) 위치 만 알고 있다면 (예를 들어, 인덱스 x에서 요소의 값을 얻고 싶다면)? – sarkon

+0

나는 귀하의 우려를 해결하기 위해 편집을했습니다. –

관련 문제