我不知道为什么以下表达式不能将字符串转换为整数:
[["1", "2"], ["10", "20"]].each {|sr| sr.map(&:to_i)}
=> [["1", "2"], ["10", "20"]]
所以,我没有得到嵌套的整数数组,而是得到了相同的String值。有什么想法吗?
谢谢。
uSer Ruby版本:2.6.1
答案 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) }
,则会得到整数值。