2015-10-19 27 views
2

運行以下:轉換字符串數組到一個整數數組中的Ruby

print ['1','2','3'].each { |j| j.to_i } 

生成輸出:

["1", "2", "3"] 

我想明白爲什麼它不產生:

[1,2,3] 

謝謝!

+1

這個問題沒有錯,但你pvotes?哦,等等,它一定是一個dup,因爲我多次看過它的版本。搜索「Ruby每個vs地圖」帶來了一堆。 –

+0

搜索「Ruby每個vs地圖」基本上是從問題的答案中恢復過來。容易做後見之明。 – FOXintheBOX

+0

我不是在批評你不知道這一點,但是這個想法是,當一個問題是一個問題時,提問者只需要指出答案。注意我說「這個問題沒有錯」。我們都必須從某個地方開始。 –

回答

1

在適用對象上調用#each將在函數完成循環後返回該對象,這就是爲什麼您要獲取原始數組。

如果你正在尋找修改數值數組中,根據一些規則,並返回結果作爲新的數組,你可以使用#map

arr = ['1', '2', '3'] 
arr.map {|j| j.to_i} 
# => [1, 2, 3] 

如果您想直接影響原始數組,您可以用#map!替代上述數字,這會改變原始數組。

希望這會有所幫助!

2

因爲.each返回一個原始數組。你必須使用.map

['1','2','3'].map(&:to_i) 
=> [1, 2, 3] 

每個定義:

rb_ary_each(VALUE array) 
{ 
    long i; 
    volatile VALUE ary = array; 

    RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length); 
    for (i=0; i<RARRAY_LEN(ary); i++) { 
     rb_yield(RARRAY_AREF(ary, i)); 
    } 
    return ary; # returns original array 
} 
0

另一種方式可以是:

print ['1','2','3'].collect(&method(:Integer)) 

但要注意這可能帶來負面的影響性能,如果你使用在生產..

相關問題