2013-10-07 3 views
-1

나는이 작업을 몇 시간 동안 해봤습니다.루비의 클래스에서 최대 값 찾기

나는이 코드에서 다른 나이와 이름으로 약 20 명의 사람을두고 있습니다.

어떻게 루비는 모든 연령대를 검색하고 가장 높은 등 나이와 내가 많이 검색했습니다

정수를 보여 주지만, 캔트 작동하도록 보일 수있다.

class Person 
    attr_reader :firstname, :familyname, :age 

    def initialize(firstname, familyname, age) 
    @firstname = firstname 
    @familyname = familyname 
    @age = age 
    end 
end 
: 나는 심지어 숫자와 인쇄 가장 높은 숫자를
+1

당신은 모든 사람이 정의하는 방법을 여기서 /를 포함하여 코드의 자세한 내용을 표시해야합니다. 또한 코드 블록에 형식 지정 메커니즘을 사용하십시오 (도움말 참조). –

답변

2

당신이이 같은 클래스가있는 경우 :

class Person 
    attr_accessor :age 
    def initialize(age) 
    @age = age 
    end 
end 

그리고이 같은 배열을 :

가장 오래된 사람

찾기

people.map(&:age).max 
#=> 30 

: Enumerable#max

people.map { |person| person.age } 
#=> [10, 20, 30] 

# or shorter 

people.map(&:age) 
#=> [10, 20, 30] 

을 그리고 최대 값 : 최대 세

당신은 Array#map와 시대를 얻을 수 있습니다 찾기

또는 당신은 찾을 수 Enumerable#max_by 가장 오래된 사람 :

oldest = people.max_by { |person| person.age } 
#=> #<Person:0x007fef4991d0a8 @age=30> 

# or shorter 

oldest = people.max_by(&:age) 
#=> #<Person:0x007fef4991d0a8 @age=30> 

그리고 그의 혹은 그녀의 나이 : 당신이 배열로 모든 인스턴스를 수집하면

oldest.age 
#=> 30 
+0

귀여운 대답은 ...:) –

+1

'max_by'도 편리한 앰퍼샌드 표기법으로 작동합니다. 'people.max_by (& : age)' – Doydle

+0

@Doydle 좋은 지적, 나는 그것을 나의 대답에 추가했다. – Stefan

0

예를 들어 클래스는 다음과 같습니다 말

def initialize(firstname, familyname, age) 
    @firstname = firstname 
    @familyname = familyname 
    @age = age 

안부

해야합니다 마지막 시대를 분류하기 위해 노력했습니다

people이라는 이러한 개체의 배열이 있다고 가정 해 보겠습니다. 그럼 당신은 같은 것을 할 수있는 : 사용

puts people.max_by { |p| p.age }.age 
0

max

예를 들어

class C 
    attr_accessor :age 
    def initialize(age) 
    @age = age 
    end 
end 

a,b,c,d = C.new(10), C.new(2), C.new(22), C.new(15) 

[a,b,c,d].map(&:age).max #=> 22 
[a.age,b.age,c.age,d.age].max #=> 22