查找对象是否在Ruby中的数组中?

时间:2015-10-26 16:55:33

标签: arrays ruby search

所以我认为这将是非常基本的但是我没有运气找出一个与数组中具有相同属性的对象是否实际上在数组中。以下代码返回false:

hand = [Card.new(:ace)]
puts("#{hand.include?(Card.new(:ace))}")

但是我看不出如何检查手持阵列中的卡是否与我在包含中提供的卡的内容相同?参数。

3 个答案:

答案 0 :(得分:1)

假设

class Card
  attr_reader :card

  def initialize(card)
    @card = card
  end
end

你可以使用:

hand.find { |c| c.card == :ace }

find会返回第一个匹配元素或nil

答案 1 :(得分:1)

因此,确保对象平等的正确方法是实施#==#hash

class Card
  attr_accessor :card

  def initialize(card)
    @card = card
  end

  def ==(other)
    other.class == self.class && other.card == @card
  end

  alias_method :eql?, :==

  def hash
    @card.to_s.hash
  end
end

p Card.new(:ace) == Card.new(:ace)
#=> true

答案 2 :(得分:0)

您需要添加一种方法来衡量卡片类卡片之间的相等性。你的班级可能如下所示:

class Card

  attr_reader :value

  def initialize(v)
    @value = v
  end

  def ==(other_card)
    @value == other_card.value
  end
end