2015-10-06 44 views
1
def initialize(ukuran) 
    @kata = Array.new(ukuran, '@') 
    @olah = @kata.join('') 
    @cek = Array.new(ukuran, @olah) 
end 

我在簡單的ruby代碼中創建了一個ukuran x ukuran大小的char二維數組。當我想改變特定索引中的字符時,例如@cek[2][3],它將改變其在索引3附近的另一個索引中的特徵,例如, @cek[0][3]@cek[1][3]在紅寶石中修改二維字符陣列

有什麼我不能在這種類型的數組?我是紅寶石新手,因爲我知道它會在另一種語言中正常工作。

回答

4

可以簡化爲:

def doit(n) 
    Array.new(n) { '@'*n } 
end 

@cek = doit(3) 
    #=> ["@@@", "@@@", "@@@"] 
@cek[1][1] = 'x' 
@cek #=> ["@@@", "@[email protected]", "@@@"] 
+0

非常感謝......做得很好 – imilah

+0

這是要走的路,但您應該簡要解釋爲什麼OP的方法沒有按預期工作。 – Stefan

+0

@斯特凡,是的,我應該有,而且會這樣做,但是它必須等到早上。 –

0

試試這個

def initialize(ukuran) 
    @kata = Array.new(ukuran, '@') 
    ## @olah = @kata.join('') 
    @cek = Array.new(ukuran, @kata) 
end 
+0

用這種方式沒有差別.. – imilah

+0

它爲您提供較大規模×較大規模的在此二維數組的大小我有通@卡塔代替@olah –

+0

這不起作用。在將方法重命名爲init後,a = init(3)#=> [[「@」,「@」,「@」],[「@」,「@」,「@」],[ @「,」@「,」@「]]; a [1] [1] ='貓'; a#=> [[「@」,「cat」,「@」],[「@」,「cat」,「@」],[「@」,「cat」,「@」]]'。 –