在将字符串转换为数组之前删除空值
Remove empty value before converting string to array
ids = "1,4,5,"
ids.split(',') => ["1", " 4", " 5", " "]
ids.split(',').map(&:to_i) => [1, 4, 5, 0]
如何在空值变为零之前将其删除?
您也可以使用#scan
ids = "1,4,5,"
ids.scan(/\d+/).map(&:to_i)
# => [1, 4, 5]
这不会发生在 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 class,它专为处理此类字符串而设计。
ids = "1,4,5,"
ids.split(',') => ["1", " 4", " 5", " "]
ids.split(',').map(&:to_i) => [1, 4, 5, 0]
如何在空值变为零之前将其删除?
您也可以使用#scan
ids = "1,4,5,"
ids.scan(/\d+/).map(&:to_i)
# => [1, 4, 5]
这不会发生在 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 class,它专为处理此类字符串而设计。