-1

私はこれを機能させるために数時間試しました。

私は、年齢と名前が異なる約20人の異なる人がいるこのコードを持っています。

ruby ですべての年齢を検索し、最も高い年齢を整数で表示するにはどうすればよいですか

私はたくさん検索してきましたが、うまくいかないようです。数字を並べ替えて、最後の年齢を印刷しようとさえしました。これは最高の数字でなければなりません

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

よろしくお願いします

4

4 に答える 4

2

このようなクラスがある場合:

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

そして、このような配列:

people = [Person.new(10), Person.new(20), Person.new(30)]

最大年齢を見つける

次の方法で年齢を取得できますArray#map

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

# or shorter

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

そして最大値Enumerable#max

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

最年長者を見つける

または、次の年齢の最も古い人を見つけることができます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
于 2013-10-07T14:31:52.507 に答える
0

たとえば、クラスが次のようになっているとします。

class Person
  attr_reader :firstname, :familyname, :age

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

と呼ばれるこれらのオブジェクトの配列があるとしますpeople。次に、次のようなことができます。

puts people.max_by { |p| p.age }.age
于 2013-10-07T14:31:40.480 に答える
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
于 2013-10-07T14:31:47.773 に答える
0

すべてのインスタンスを配列に収集したら、Ruby でクラス インスタンスを取得する方法に示されている手法のいずれかを使用します。、特定の属性の最大値を持つRuby配列の要素を見つけるに示されている手法を使用して、最大年齢を見つけることができます。たとえば、Fooがクラスageで、 がクラスの属性である場合、次のように動作するはずです。

ObjectSpace.each_object.select{|foo| obj.class == Foo}.max_by {|foo| foo.age}
于 2013-10-07T14:32:16.940 に答える