2016-10-18 27 views
0

我初始化我的數組如何填充,並使用高達或紅寶石陣「..」

my_array = Array.new(26) 

,然後嘗試填充它

my_array[0..25] = ["A".."Z"] 
# => "A".."Z" 

同樣的輸出,當我嘗試:

my_array[0..25] = "A".upto("Z") 
# => "A".."Z" 

當我嘗試使用一個塊時:

my_array[0..25] = "A".upto("Z") { |l| l} #=> "A" 
my_array 
# => ["A"] 

當嘗試上述填充的第一或第二方法後,我檢查my_array:

my_array 
# => ["A".."F"] 

我明白的是一個枚舉。所以我嘗試:

my_array.each {|l| p l} 

但所有我回來是

"A..F" 
# => ["A".."F"] 

實際上被存儲在數組中?

我該如何正確實現與英文字母排列的填充?

回答

1

紅寶石其實有一個叫to_a方法,你可以將範圍轉換成數組。所以,如果我想要一個變量與字母的所有字母使用範圍我可以做alphabet = ('a'..'z').to_a。另外,ruby是動態類型的,你不需要初始化一個數組。 a = [1,2,3]是你需要做的。你不會需要做

a = Array.new(3) 
a = [1,2,3] 
+0

所以我基本上需要枚舉(「A..Z」)改變爲數組類型。黨!希望我早點問過。 :) 謝謝。 – PakiPat

1
my_array = Array.new(26) 

my_array[0..25] = ["A".."Z"] 
#=> "A".."Z" 

my_array.size 
    #=> 1 
my_array.first 
    #=> "A".."Z" 
my_array.first.is_a? Range 
    #=> true 

如果我們最初寫my_array = []的結果將是一樣的。

獲得你想要的東西,最簡單的辦法是圖示範圍:

my_array = [] 
my_array[0..25] = *"A".."Z" 
    #=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 
    # "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] 

這相當於

my_array[0..25] = "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 
        "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" 

但是這可以在一個單一的操作來完成:

my_array = *"A".."Z" 
    #=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 
    # "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]