首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby -如何填充2d数组?

Ruby -如何填充2d数组?
EN

Stack Overflow用户
提问于 2014-01-01 13:37:43
回答 3查看 2.3K关注 0票数 0

我有一个rspec测试:

代码语言:javascript
复制
  it 'has a populated chessboard' do
    expect(ChessBoard.new.populate_new_board).to eq [
      ['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
      ['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
      ['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
      ['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
      ['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
      ['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
      ['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
      ['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn']]

  end

对于此代码:

代码语言:javascript
复制
class ChessBoard

  def initialize
    @board=Array.new(7){Array.new(7)}
  end

  def populate_new_board
    (0..7).each do |row|
      (0..7).each do |cell|
        @board[row][cell]='pawn'
      end
    end
    @board
  end

end

但我得到了:

代码语言:javascript
复制
  1) least number of moves from x to y has a populated chessboard
     Failure/Error: expect(ChessBoard.new.populate_new_board).to eq [
     NoMethodError:
       undefined method `[]=' for nil:NilClass
     # ./code.rb:10:in `block (2 levels) in populate_new_board'
     # ./code.rb:9:in `each'
     # ./code.rb:9:in `block in populate_new_board'
     # ./code.rb:8:in `each'
     # ./code.rb:8:in `populate_new_board'
     # ./code_spec.rb:12:in `block (2 levels) in <top (required)>'

我怎么才能解决这个问题?

顺便说一下,每个空间中的棋子不是最终的结果,但这正是我现在想要的测试结果(然后我可以进一步修改它)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-01 13:45:46

改为:

代码语言:javascript
复制
def populate_new_board
  (0...7).each do |row|
    (0...7).each do |cell|
      @board[row][cell]='pawn'
    end
  end
  @board
end
票数 1
EN

Stack Overflow用户

发布于 2014-01-01 15:43:14

代码语言:javascript
复制
class ChessBoard
   def populate_new_board
      @board = [['pawn'] * 7] * 7
   end
end
票数 3
EN

Stack Overflow用户

发布于 2014-01-01 14:30:57

因为它表示您在范围内做了一个错误,但是强烈建议您减少索引范围的使用。您可以使用:each:map方法来代替:

代码语言:javascript
复制
class ChessBoard
   def initialize
      @board = Array.new( 7 ){ Array.new( 7 ) }
   end

   def populate_new_board
      @board.each {| row | row.map! {| _ | 'pawn' } }
   end
end

但我会使用更多的简单代码:

代码语言:javascript
复制
class ChessBoard
   def populate_new_board
      @board = Array.new( 7 ){Array.new( 7 ) { 'pawn' } }
   end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20869171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档