在Ruby中将字符串转换为整数数组

8

如何将字符串:s = '23534' 转换为以下数组:a = [2,3,5,3,4]

在 Ruby 中,是否有一种方法可以迭代字符串中的字符,并将每个字符转换为 to_i 或者将字符串表示为字符数组(就像 Java 中那样),然后将所有字符转换为 to_i

正如您所看到的,我没有像字符串中的其他答案一样包含分隔符 ,

5个回答

19
一个简单的一行代码就可以搞定:
s.each_char.map(&:to_i)
#=> [2, 3, 5, 3, 4]

如果你希望当字符串不仅包含整数时可以更明确的显示错误,你可以这样做:

s.each_char.map { |c| Integer(c) }

如果您的字符串包含的不是整数,则会引发ArgumentError: invalid value for Integer():。否则,对于 .to_i,您将看到字符的值为零。

结果为:

如果您的字符串包含的不是整数,则会引发ArgumentError: invalid value for Integer():。否则,对于 .to_i,您将看到字符的值为零。


5

简短明了:

"23534".split('').map(&:to_i)

说明:

"23534".split('') # Returns an array with each character as a single element.

"23534".split('').map(&:to_i) # shortcut notation instead of writing down a full block, this is equivalent to the next line

"23534".split('').map{|item| item.to_i }

3
有多种方法可以实现这个目标。
  1. '12345'.chars.map(&:to_i)

  2. '12345'.split("").map(&:to_i)

  3. '12345'.each_char.map(&:to_i)

  4. '12345'.scan(/\w/).map(&:to_i)

我最喜欢的是第三种方法。更具表现力和简单易懂。

1
'23534'.to_i.digits.reverse - steenslag

3
您可以使用String#each_char方法:
array = []
s.each_char {|c| array << c.to_i }
array
#=> [2, 3, 5, 3, 4]

或者仅使用s.each_char.map(&:to_i)

ahhhh each_char 来拯救了我...这正是我在字符串 API 中忽略的东西... - mahatmanich

2
在Ruby 1.9.3中,您可以执行以下操作将数字字符串转换为数字数组:
如果在split(',')逗号后没有空格,则会得到以下结果: "1,2,3".split(',') # => ["1","2","3"]
如果在split(', ')逗号后有一个空格,则会得到以下结果: "1,2,3".split(', ') # => ["1,2,3"]
如果在split(',')逗号后没有空格,则会得到以下结果: "1,2,3".split(',').map(&:to_i) # => [1,2,3]
如果在split(', ')逗号后有一个空格,则会得到以下结果: "1,2,3".split(', ').map(&:to_i) # => [1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接