質問: true} print chairs > true true true [false, false, false, false, false, false] true [false, false, false, false, false, false] true true [false, false, false, false, false, false] ``` と、trueの代入を行った直後にデバックとして出力結果を試みながら行っていたのですがchairsの値が変化してくれません。 なぜなのかさっぱりなので原因を教えてほしいです。 またこの問題に対するアルゴリズムの考え方はどうかご意見をお聞かせください。 こんな考えもあるよ、短くかけるよ、なども大歓迎です。 駄文ですがよろしくお願いします。
回答: こんにちは。 その問題を解くアルゴリズムの実装として正しいかはさておき、 **ある配列 ary のインデクス n の位置からm 個を 値 x で上書きする。** ためには、以下のように書くとよいです。(もしかしたら他のより良い書き方があるかもしれませんが) ``` ary[n, m] = Array.new(m, x) ``` 参考: Rubyリファレンス:[]= (Array) 以下は、上記の例です。 ``` ary = Array.new(10) { |i| i } p ary # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # インデクス 3 の位置から、4 個の要素を 999 にする。 ary[3, 4] = Array.new(4, 999) p ary # => [0, 1, 2, 999, 999, 999, 999, 7, 8, 9] ``` 上記にそって、ご質問にある ``` chairs[f_chair,cnt].map{|c| c = true} <--ここに問題あり ``` の部分を ``` chairs[f_chair,cnt] = Array.new(cnt, true) ``` とすれば、(実際に動かして試してはいませんが)とりあえず、 > > 着席番にtrueをいれたいのですがtrueになりません。 > > > という問題は解決するかと思います。 以上参考になれば幸いです。