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

时间:2015-10-19 20:09:22

标签: ruby string integer type-conversion

运行以下内容:

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

生成输出:

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

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

[1,2,3]

谢谢!

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

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

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

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

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

希望这有帮助!

答案 2 :(得分:0)

另一种方式可能是:

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

但请注意,如果您要在生产中使用,这会给性能带来不利影响。