2010-08-16 5 views
7
{"Journal"=>[[4, -785.0], 
      [13, -21.9165000915527], 
      [14, -213.008995056152], 
      [15, -50.074499130249]]} 

어떻게이 해시를 루비에서 반복 할 수 있으며 & 키를 분리 할 수 ​​있습니까? 경우해시 수집 반복

+0

, 당신은을 어쩌면 틀린 콘테이너를 사용하여 – Scoregraphic

+0

@Scoregraphic - 꼭 그런 것은 아닙니다 - 이것은 드문 경우는 아닙니다. 예 : 데이터 직렬화. –

+0

잠깐, 값이 배열 배열 인 단일 키/값 쌍을 가진 해시가 있습니까? – haffax

답변

14
myHash.each do |key, value| 
    // key holds the key, value holds the value 
end 

이렇게지도에 배열 안에 배열을 변환 할 :

myNewHash = {} 
myArrayOfArrays = myHash["Journal"] 
myArrayOfArrays.each do | item | 
    myNewHash[item[0]] = item[1] 
end 
21

루비는 균일 한 반복 인터페이스를 가지고 있습니다. Ruby의 모든 컬렉션에는 each이라는 메서드가 있습니다.이 메서드를 사용하면 컬렉션의 각 요소를 반복 할 수 있습니다. 그러나 명시 적 반복은 코드 냄새입니다. 주로 map, reduce, select, find, reject 등과 같은 상위 수준 반복기를 사용해야합니다. 루비 destructuring에

print hsh.reduce('') {|s, el| 
    s << "The key is #{el.first} and the value is #{el.last}.\n" 
} 

감사 : 콜렉션이 Hash하여 블록으로 수득되는 각 원소 특히이 경우

는 키 값으로 이루어진 두 소자 어레이 인 바인딩, 당신은 단순히 블록의 두 변수에 배열의 두 요소를 결합 할 수 있으며, 지속적으로 떨어져 배열 취할 필요가 없습니다 : 당신이 해시 맵을 반복해야하는 경우

print hsh.reduce('') {|s, (k, v)| 
    s << "The key is #{k} and the value is #{v}.\n" 
}