2010-06-29 2 views
2

저는 요소의 배열을 가지고 있으며 각 요소에는 image : 속성이 있습니다.Ruby에서 객체 배열에서 중첩 된 객체의 배열을 추출하는 방법은 무엇입니까?>

나는 이미지의 배열을 원한다. 그래서 이것을 달성하는 가장 빠르고 저렴한 방법은 무엇인가? 그냥 배열을 통해 반복과 같은 새로운 배열, 무언가로 각 요소를 밀어 수 있습니다 : 이것은 당신의 버전과 동일한 성능에 대해,하지만 좀 더 간결하고 더 관용적입니다해야

images = [] 
elements.each {|element| images << element.image} 

답변

3

이러한 종류의 것들을 테스트하려면 Benchmark module을 사용할 수 있습니다. 그래서처럼 원래의 코드에 대해 sepp2k의 버전 @ 실행 :

require 'benchmark' 

class Element 
    attr_accessor :image 

    def initialize(image) 
    @image = image 
    end 
end 

elements = Array.new(500) {|index| Element.new(index)} 

n = 10000 

Benchmark.bm do |x| 
    x.report do 
    n.times do 
     # Globalkeith's version 
     image = [] 
     elements.each {|element| image << element.image} 
    end 
    end 
    # sepp2k's version 
    x.report { n.times do elements.map {|element| element.image} end } 
end 

출력 을 (3 개 이상 실행 후) 일관했다 내 컴퓨터이 매우 가까이에 :

user  system  total  real 
2.140000 0.000000 2.140000 ( 2.143290) 
1.420000 0.010000 1.430000 ( 1.422651) 

는 따라서 있음을 보여주는 map은 배열이 다소 크고 작업이 여러 번 수행되는 경우 수동으로 배열에 추가하는 것보다 훨씬 빠릅니다.

+0

고마워, 그게 정말 유용한 답변이야! – ktec

+0

당신을 진심으로 환영합니다! 그냥 도와 줘서 고마워. :) –

5
elements.map {|element| element.image} 

.

+2

또는 symbol-to-proc hotness (해당 버전이 지원한다고 가정)'elements.map (& : image)' – thorncp

+0

'elements.map (& : image) '로 테스트했을 때, 어레이에 수동으로 추가하는 것만큼이나 느립니다! – ktec

관련 문제