Ruby:将字符串转换为嵌套数组的整数值

时间:2019-04-02 09:56:00

标签: ruby

我不知道为什么以下表达式不能将字符串转换为整数:

[["1", "2"], ["10", "20"]].each {|sr| sr.map(&:to_i)}
=> [["1", "2"], ["10", "20"]]

所以,我没有得到嵌套的整数数组,而是得到了相同的String值。有什么想法吗?

谢谢。

uSer Ruby版本:2.6.1

4 个答案:

答案 0 :(得分:5)

这是因为您使用的是each,它将返回原始数组。请改用map

[["1", "2"], ["10", "20"]].map { |sr| sr.map(&:to_i) }
# => [[1, 2], [10, 20]]

您还可以使用map!,它修改数组而不是返回一个新数组,如下所示:

[["1", "2"], ["10", "20"]].each { |sr| sr.map!(&:to_i) }
# => [[1, 2], [10, 20]]

显然,这取决于您的需求。

答案 1 :(得分:2)

@MarekLipka的答案完美地阐明了纯红宝石的问题,但我在这里无耻地宣传我的宝石iteraptor

[["1", "2"], ["10", "20"]].
  iteraptor.
  map { |_key, value| value.to_i }
#⇒ [[1, 2], [10, 20]]

或者,如果您喜欢西班牙语:

[["1", "2"], ["10", "20"]].mapa { |_, value| value.to_i }
#⇒ [[1, 2], [10, 20]]

它可以与任何深度的数组一起使用:

[[["1", "2"], ["3"]], [[[[["10"]]]], "20"]].
  mapa { |_key, value| value.to_i }
#⇒ [[[1, 2], [3]], [[[[[10]]]], 20]]

答案 2 :(得分:0)

使用此代码

p [["1", "2"], ["10", "20"]].map{|x,y|[x.to_i,y.to_i]}

输出

[[1, 2], [10, 20]]

答案 3 :(得分:0)

如果将其更改为[["1", "2"], ["10", "20"]].map { |sr| sr.map(&:to_i) },则会得到整数值。