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

将数组的Ruby数组转换为哈希

ruby 将多维数组转换为一个数组

Ruby 1.9:将字节数组转换为具有多字节 UTF-8 字符的字符串

如何将嵌套对象转换为数组数组

将平面对象数组转换为嵌套对象数组[重复]