Ruby - 将混合字符串转换为数组

时间:2016-09-06 04:40:54

标签: arrays ruby string

我正在处理一个问题,我被给予了一个"编码"消息以字符串的形式,并且必须返回已解码的消息。这需要我将一串混合字符和数字拆分成一个数组。例如,如果我得到这样的字符串:

"0h"

我想把它拆分成这样的数组:

[0, "h"]

但是当我使用.split时,我得到了

["0", "h"]

我找到的解决方案只考虑所有数字的字符串,但不考虑混合字符串。有没有办法在保留字符的同时将数字字符串转换为数字?

2 个答案:

答案 0 :(得分:4)

您可以将String#scan与正则表达式一起使用。

str = "0hh1ghi22d"

str.scan(/\d+|\D+/).map { |s| s =~ /\d+/ ? s.to_i : s }
  #=> [0, "hh", 1, "ghi", 22, "d"]

str.each_char.map { |s| s =~ /\d/ ? s.to_i : s }
  #=> [0, "h", "h", 1, "g", "h", "i", 2, 2, "d"]

取决于要求。

答案 1 :(得分:1)

如果我理解正确,您希望字符串中的数字最终为数组中的Fixnums。

您可以通过向.map

添加split来完成此操作
... .map { |c| c =~ /\d/ ? c.to_i : c }