ruby 如何返回所需的结果数组

xv8emn3q  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(158)

我有一个代码,这是不给所需的回报.下面是代码

class Turn
  def initialize(passcode:)
    @passcode = passcode
  end

  def guess(colors)
    result = []
    passcode.each_with_index do |passcode_color, idx|
      if colors[idx] == passcode_color
        result << :exact
      elsif colors.include?(passcode_color)
        result << :partial
      end
    end
    result
  end

  private

  attr_reader :passcode
end

passcode = ["RED", "GREEN", "BLUE", "YELLOW"]

player = Turn.new(passcode: passcode)

player.guess(["RED", "GREEN", "BLUE", "GREEN"]

上面的方法调用给出的输出为=〉[:exact,:exact,:exact]。
同时,这是我想要的输出=〉[:exact,:exact,:exact,:partial]。
我认为颜色数组中的最后一种颜色(绿色)包含在密码中,但没有包含在确切的位置,因此需要部分颜色。
请,我如何修改代码得到这个输出=〉[:exact,:exact,:exact,:partial].

jv4diomz

jv4diomz1#

"YELLOW"不在colors中,因此没有为这种可能性向result添加任何内容。
您可能希望使用#map。在"YELLOW"的情况下,使用以下代码,nil将被添加到结果数组中。

class Turn
  def initialize(passcode:)
    @passcode = passcode
  end

  def guess(colors)
    @passcode.each_with_index.map do |passcode_color, idx|
      if colors[idx] == passcode_color
        :exact
      elsif colors.include? passcode_color
        :partial
      end
    end
  end
end

如果您希望在该场景中包含类似:notfound的内容,则可以添加else

class Turn
  def initialize(passcode:)
    @passcode = passcode
  end

  def guess(colors)
    @passcode.each_with_index.map do |passcode_color, idx|
      if colors[idx] == passcode_color
        :exact
      elsif colors.include? passcode_color
        :partial
      else
        :notfound
      end
    end
  end
end

相关问题