在将字符串转换为数组之前删除空值

时间:2015-03-16 17:55:25

标签: ruby arrays split

ids = "1,4,5,"

ids.split(',') => ["1", " 4", " 5", " "]

ids.split(',').map(&:to_i) => [1, 4, 5, 0]

如何在空值变为零之前将其删除?

2 个答案:

答案 0 :(得分:3)

您也可以使用#scan

ids = "1,4,5,"
ids.scan(/\d+/).map(&:to_i)
# => [1, 4, 5]

答案 1 :(得分:1)

这不会发生在Ruby 2.2 +中:

ids = "1,4,5,"
ids.split(',')
# => ["1", "4", "5"]

RUBY_VERSION # => "2.2.0"

简单的做法是对您的数据进行预检检查并将其标准化为它应该是什么,然后再尝试处理它:

ids = "1,4,5,"

ids.chop! if ids[-1] == ','
ids # => "1,4,5"

ids.split(',')
# => ["1", "4", "5"]

在测试中你可能会更严格一些,因为该行的结尾也可能包含空格,这会破坏清理。

此外,您正在处理以逗号分隔的数据,因此请考虑使用内置的CSV类,该类旨在使用此类字符串。