gpt4 book ai didi

ruby - ruby 数组中的唯一对象

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:11 25 4
gpt4 key购买 nike

程序应该只生产唯一的飞机,它重复元素数组。 uniq 方法没有帮助。

class Airplane

attr_accessor :model

def initialize(model)
@model = model
end
end

models = [ "Boeing 777-300ER",
"Boeing 737-800",
"Airbus А330-200",
"Airbus А330-300",
"Airbus А321",
"Airbus A320",
"Sukhoi SuperJet 100"]
planes = []

150.times do

model = models[rand(0..6)]
plane = Airplane.new(model)

planes << plane

在这里尝试 # planes = planes.uniq 没有帮助

    break if models.length == planes.length
end

# result
planes.uniq.each do |plane| # <<<< uniq doesn't help
puts "Model: #{plane.model}"
end

最佳答案

除非另有说明,否则没有两个对象是相同的:

Object.new.eql?(Object.new)
# => false

因此,就 #uniq 而言,所有 150 个 Airplane 实例都是唯一的,没有重复。

解决此问题的最简单方法是为 #uniq 提供唯一性标准:

planes.uniq(&:model)

另一种方法是为 Airplane 类定义“重复”的含义:

class Airplane
attr_accessor :model

def initialize(model)
@model = model
end

def ==(other)
other.class == self.class && other.model == self.model
end

alias_method :eql?, :==

def hash
self.model.hash
end
end

但是,在所有情况下,此解决方案都会使同一型号的两架飞机同一架飞机,这可能会在其他地方产生意想不到的后果。

关于ruby - ruby 数组中的唯一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57815458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com