Ruby:将String转换为嵌套数组的Integer值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby:将String转换为嵌套数组的Integer值相关的知识,希望对你有一定的参考价值。
我无法弄清楚为什么下面的表达式不会将字符串转换为整数:
[["1", "2"], ["10", "20"]].each |sr| sr.map(&:to_i)
=> [["1", "2"], ["10", "20"]]
因此,我没有得到一个整数数字的嵌套数组,而是仍然得到相同的String值。任何的想法 ?
谢谢。
uSer Ruby版本:2.6.1
答案
这是因为你正在使用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]]
这显然取决于你想要什么。
另一答案
虽然@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]]
另一答案
使用此代码
p [["1", "2"], ["10", "20"]].map|x,y|[x.to_i,y.to_i]
产量
[[1, 2], [10, 20]]
另一答案
如果将其更改为[["1", "2"], ["10", "20"]].map |sr| sr.map(&:to_i)
,您将获得整数值。
以上是关于Ruby:将String转换为嵌套数组的Integer值的主要内容,如果未能解决你的问题,请参考以下文章
在Ruby中将嵌套哈希键从CamelCase转换为snake_case