2011-10-06 5 views
0

나는 다음과 유사 (MongoDB를에서 내지도/감소 출력) 해시의 배열이 고려 여러 값을 결합, 해시를 변환 :루비는

[ 
    {"minute"=>30.0, "hour"=>15.0, "date"=>5.0, "month"=>9.0, "year"=>2011.0, "type"=>10.0, "count"=>299.0}, 
    {"minute"=>0.0, "hour"=>16.0, "date"=>5.0, "month"=>9.0, "year"=>2011.0, "type"=>10.0, "count"=>477.0}, 
    ... 
] 

을하지만 모든 싶지 않아 그 시간 관련 키 및 값 중, 나는 각 개체에 대한 날짜 개체로 그들을 결합하고 싶습니다 또한 문자열보다 내 키로 기호를 사용하는 것이 더 효율적이지 않을까요?

[ 
    {timestamp: DateTime.new(2011.0, 9.0, 5.0, 15.0, 30.0), count: 299, type: 10}, 
    {timestamp: DateTime.new(2011.0, 9.0, 5.0, 16.0, 0.0), count: 477, type: 10}, 
    ... 
] 

이에 어떤 도움이 정말 좋지 않을까. 감사!

+1

그냥지도 야, 내가 문제를 볼 수 없습니다 ... 최소한 당신이 시도한 것을 보여주십시오. – tokland

답변

2

직선 전달 방법은 아마 당신이받을거야만큼 좋은, 당신이있는 거 배열은 다음 a 경우 :

pancakes = a.map do |h| 
    { 
     :timestamp => DateTime.new(h['year'], h['month'], h['date'], h['hour'], h['minute']), 
     :count  => h['count'].to_i, 
     :type  => h['type'].to_i 
    } 
end 
+0

+1하지만 왜 "a"를 파괴합니까? b = a.map ... 또한이 방법이 더 좋게 보일 수 있습니다. DateTime.new (* h.values_at ('year', 'month', 'date', 'hour', 'minute')) – tokland

+0

@tokland :'b' 대신'팬케익 '은 어때요? 나는 그가 그것을 대체하고 싶다는 인상을 받았다. 만약 배열에 키가 있다면 (아마도 double splat을 가질 것입니다!)''h''보다 긴 변수 이름이 필요하지만 그렇게 많은 차이를 만들지는 않는다면'values_at'를 사용할 것입니다 이리. –

+0

"컵케익"을 먹었을 텐데 "팬케이크"도 좋다 ;-) 나는 FP 원리에 따라 - 루비 같은 언어로 약간의 메모리/CPU 페널티를 지불한다고해도 - 가치가 있다고 생각한다. 나는 그것을 언급하는 것이 좋은 교수법이라고 생각합니다. 일부 프로그래머는 FP에 대해 들어 보지 않았고 좋은 이유없이 변수를 계속해서 업데이트합니다. – tokland

관련 문제