運行以下:轉換字符串數組到一個整數數組中的Ruby
print ['1','2','3'].each { |j| j.to_i }
生成輸出:
["1", "2", "3"]
我想明白爲什麼它不產生:
[1,2,3]
謝謝!
運行以下:轉換字符串數組到一個整數數組中的Ruby
print ['1','2','3'].each { |j| j.to_i }
生成輸出:
["1", "2", "3"]
我想明白爲什麼它不產生:
[1,2,3]
謝謝!
在適用對象上調用#each
將在函數完成循環後返回該對象,這就是爲什麼您要獲取原始數組。
如果你正在尋找修改數值數組中,根據一些規則,並返回結果作爲新的數組,你可以使用#map
:
arr = ['1', '2', '3']
arr.map {|j| j.to_i}
# => [1, 2, 3]
如果您想直接影響原始數組,您可以用#map!
替代上述數字,這會改變原始數組。
希望這會有所幫助!
因爲.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
}
另一種方式可以是:
print ['1','2','3'].collect(&method(:Integer))
但要注意這可能帶來負面的影響性能,如果你使用在生產..
這個問題沒有錯,但你pvotes?哦,等等,它一定是一個dup,因爲我多次看過它的版本。搜索「Ruby每個vs地圖」帶來了一堆。 –
搜索「Ruby每個vs地圖」基本上是從問題的答案中恢復過來。容易做後見之明。 – FOXintheBOX
我不是在批評你不知道這一點,但是這個想法是,當一個問題是一個問題時,提問者只需要指出答案。注意我說「這個問題沒有錯」。我們都必須從某個地方開始。 –