繁体   English   中英

如何在ruby中的多维数组中拆分字符串?

[英]How to split a String in a multidimensional Array in ruby?

我在Ruby中有一个多维数组,如下所示:

[["2013-08-22 13:23:12 +0212", 100, 1], ["2013-09-22 14:25:12 +0123" , 123, 1]]

我想将字符串在第一个数组位置和时间拆分为小时,分钟和秒(并将它们转换为整数),因此它将变为:

[["2013-08-22", 13, 23, 12, "+0212", 100, 1], [.....]]

有谁知道如何解决这个问题?

如果您想提高可读性,建议这样做:

require 'date'
array = [["2013-08-22 13:23:12 +0212", 100, 1], ["2013-09-22 14:25:12 +0123" , 123, 1]]
array.map do |date_time, a, b|
  date_time = DateTime.parse(date_time)

  [
    date_time.strftime('%F'), date_time.hour, date_time.min,
    date_time.sec, date_time.strftime('%z'), a, b
  ]
end

它非常清楚结果数组中的每个元素是什么。 如果a ,请使用有意义的名称替换ab

[["2013-08-22 13:23:12 +0212", 100, 1],
 ["2013-09-22 14:25:12 +0123" , 123, 1]].

   map do |arr|
     arr.shift.split(/[: ]/) + arr # first position only
     # ⇓ this will convert hours, minutes and seconds  to integers
     # arr.shift.split(/[: ]/).map { |e| e[/\A\d+\z/] ? e.to_i : e } + arr
     # ⇓ this would work for all strings
     # arr.flat_map { |e| e.is_a?(String) ? e.split(/[: ]/) : e }
   end
#⇒ [
#  [0] [
#    [0] "2013-08-22",
#    [1] "13",
#    [2] "23",
#    [3] "12",
#    [4] "+0212",
#    [5] 100,
#    [6] 1
#  ],
#  [1] [
#    [0] "2013-09-22",
#    [1] "14",
#    [2] "25",
#    [3] "12",
#    [4] "+0123",
#    [5] 123,
#    [6] 1
#  ]
# ]

这是另一个选择(将小时,分钟和秒转换为整数):

arr = [["2013-08-22 13:23:12 +0212", 100, 1], ["2013-09-22 14:25:12 +0123" , 123, 1]]

arr.map do |item|
  date, time, zone = item[0].split.map { |e| e.split(":") }
  [date, time.map(&:to_i), zone, item[1..-1]].flatten
end
#=> [["2013-08-22", 13, 23, 12, "+0212", 100, 1], ["2013-09-22", 14, 25, 12, "+0123", 123, 1]]

无损方式。 ref @mudasobwa回答

arr = [["2013-08-22 13:23:12 +0212", 100, 1], ["2013-09-22 14:25:12 +0123" , 123, 1]]
arr.map {|e| e[0].split(/[ :]/) + e[1..-1] } 
#=> [["2013-08-22", "13", "23", "12", "+0212", 100, 1], ["2013-09-22", "14", "25", "12", "+0123", 123, 1]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM