【问题标题】:converting an array of strings to an array of integers in Ruby在 Ruby 中将字符串数组转换为整数数组
【发布时间】:2016-01-18 07:24:11
【问题描述】:

运行以下:

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

生成输出:

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

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

[1,2,3]

谢谢!

【问题讨论】:

  • 这个问题没有错,但是点赞??哦,等等,它一定是一个骗局,因为我已经看过很多次了。在“Ruby each vs map”上搜索会出现一堆。
  • 搜索“Ruby each vs map”本质上是从问题的答案中恢复过来。事后看来很容易做到。
  • 我并没有批评你不知道这一点,但我的想法是,当一个问题是重复的时候,提问者只需要指出答案。注意我说“这个问题没有错”。我们都必须从某个地方开始。

标签: ruby string integer type-conversion


【解决方案1】:

因为.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
}

【讨论】:

    【解决方案2】:

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

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

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

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

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      另一种方式可能是:

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

      但请注意,如果您要在生产环境中使用,这可能会降低性能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-21
        • 2016-05-05
        • 2019-04-21
        相关资源
        最近更新 更多