如果其中一个元素为零,如何将数组拆分为两个?

时间:2017-01-27 23:54:52

标签: arrays ruby split null

我使用的是Ruby 2.4。我有一个数组,我想分成两个,其中第一个数组将是字母" a"或" b"而第二个数组将是其他所有,所以我有这个

arr1, arr2 = data_col.map { |x| a, b, c = x.partition(/^[ab][[:space:]]+/i); [b.strip, a + c] }.transpose 

但是,如果某个阵列中的一个元素为零,则会失败。我如何解释这一点,并强制两个零元素在结果数组中?如果原始数组是

,那就是
["A bcd", nil, "B 123"]

结果数组将是

["A", nil, "B"], ["bcd", nil, "123"]

2 个答案:

答案 0 :(得分:0)

假设非空元素总是需要在空间分割,你可以取消分区和正则表达式测试,只需这样做:

>> a = ["A bcd", nil, "B 123"]
>> a.map { |e| e ? [e.split.first, e.split.last] : [nil, nil] }.transpose
=> [["A", nil, "B"], ["bcd", nil, "123"]]

答案 1 :(得分:0)

明确检查

arr1, arr2 = data_col.map do |x| 
  if x
    a, b, c = x.partition(/^[ab][[:space:]]+/i)
    [b.strip, a + c] 
  else
    [nil, nil]
  end
end.transpose 

这里没有聪明的方法来进行nil传播。

如果您使用""作为结果元素很酷,请尝试使用

arr1, arr2 = data_col.map { |x| a, b, c = (x || "").partition(/^[ab][[:space:]]+/i); [b.strip, a + c] }.transpose