루비 1.8 : 해시#정렬 해시가 아니지만 배열 (더 나은 방법은?)

StackOverflow https://stackoverflow.com/questions/489139

  •  20-08-2019
  •  | 
  •  

문제

루비 1.8의 일부 시나리오에서. 해시가 있다면

# k is name, v is order
foo = { "Jim" => 1, "bar" => 1, "joe" => 2}
sorted_by_values = foo.sort {|a, b| a[1] <==> b[1]}
#sorted_by_values is an array of array, it's no longer a hash!
sorted_by_values.keys.join ',' 

내 해결 방법은 방법을 만드는 것입니다 to_hash 배열 클래스의 경우.

class Array
  def to_hash(&block)
    Hash[*self.collect { |k, v|
      [k, v]
    }.flatten]
  end
end

그런 다음 다음을 수행 할 수 있습니다.

sorted_by_values.to_hash.keys.join ','

더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

해시는 정의에 따라 변하지 않습니다. 분류 된 해시와 같은 것은 없습니다. 가장 좋은 방법은 아마도 수집을 사용하여 정렬 된 배열에서 키를 추출한 다음 결과에 가입하는 것입니다.

sortedByValues = foo.sort {|a, b| a[1] <==> b[1]}
sortedByValues.collect { |a| a[0] }.join ','
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top