2017-01-24 5 views
2

내 해시가 심술 궂습니다. :(Ruby : 해시가 잘 정렬되지 않습니다.

나는 그것을 정렬 할하지만 원하지 않으며, 나는 그것의 이유를 찾을 수 없습니다 :

x = [{2 => "two", 1 => "one"}, {4 => "four", 3 => "three"}] 

x.each do |y| 
    if y.is_a?(Hash) then y = y.sort end 
end 

(해시가 .each 방법으로 정렬되어야한다)를

결국

,이 구조를 가지는 대신 :

[[[1, "one"], [2, "two"]], [[3, "three"], [4, "four"]]] 
:

[{2=>"two", 1=>"one"}, {4=>"four", 3=>"three"}] 

을 나는이 구조를 원하는 내가 ::Hash에 의해 Hash을 대체하거나 정렬하기 전에 배열로 해시를 변환하려고 몇 가지 비슷한 질문을 읽은 후

하지만 여전히 작동하지 않습니다 ... 나는 내 해시를 정렬 할 수 있습니다 방법

?

+3

당신은 어떻게 정렬 할 않습니다. 어떤 결과를 원하십니까? – jasmo2

+0

[{1 => "1", 2 => "2"}, {3 => "3", 4 => "4"}] 이 구조체를 원합니다 : [ [[1, "one"], [2, "two"]], [[3, "three"], [4, "four"]]] – nounoursnoir

+1

예제에는 정렬이 필요하지 않습니다. 정렬이 필요할 경우 원하는 정렬 순서 (배열로 변환되기 전에 배열의 해시 순서와 각 해시 내의 키 - 값 쌍 순서 모두)를 설명하고 (특히) 배열을 변경하십시오. 예제에서 해시가 원하는 정렬 된 순서가 아니도록 해시합니다. –

답변

2
arr = [{2=>"two", 1=>"one"}, {4=>"four", 3=> "three"}] 

arr.map { |h| h.sort_by(&:first) } 
    #=> [[[1, "one"], [2, "two"]], [[3, "three"], [4, "four"]]] 
0

캐리 Swoveland의 대답은 여기에 짧은 하나

이다 나는

x = [{ 2 => "two", 1 => "one"}, {4 => "four", 3 => "three"}] 
y = x.map{ |el| el.to_a.sort } 

그래서 변수가해야 더 긴 버전을 쓰기

x => [{ 2 => "two", 1 => "one"}, {4 => "four", 3 => "three"}] 
y => [[[1, "one"], [2, "two"]], [[3, "three"], [4, "four"]]] 
1

루프와 같은 너의 해시가 심술 스럽다 :)

해시를 정렬 중이지만 루프가 배열을 업데이트하지 않습니다.

여기서 간단한 예

array.each do |y| 
    y = y.sort 
end 

위의 로컬 변수 y에 정렬 된 해시를 재 할당함으로써 array 값을 업데이트하지 않고있다. 블록 매개 변수에 지정하면 열거중인 배열에 다시 쓰지 않습니다.

사용 map 대신

array = array.map do |y| 
    y.sort 
end 
관련 문제