将字符串数组转换为 Ruby 中的整数数组

converting an array of strings to an array of integers in Ruby

运行 如下:

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

生成输出:

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

我想了解为什么它不生成:

[1,2,3]

谢谢!

在函数完成循环后,对适用对象调用 #each 将 return 该对象,这就是您获取原始数组的原因。

如果您希望根据某种规则修改数组中的值,并且 return 将结果作为新数组,您可以使用 #map:

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

如果您想直接影响原始数组,可以将上面的内容替换为 #map!,这会改变原始数组。

希望对您有所帮助!

因为.each returns一个原始数组。你必须使用 .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))

但是请注意,如果您要在生产中使用,这可能会对性能造成不利影响。