2016-08-25 2 views
-1

Ich habe ein Array auf diese Weise -Display-Array in tabellarischer Form

arr = ["0.5", " 2016-08-25 11:02:00 +0530", " test 1", 
     " 0.75", " 2016-08-25 11:02:00 +0530", " test 2"] 

und ich möchte es in tabellarischer Form wie folgt dargestellt werden -

0.5 11:02 test 1 
0.75 11:02 test 2 

Antwort

5
a = ["0.5", " 2016-08-25 11:02:00 +0530", " test 1", " 0.75", " 2016-08-25 11:02:00 +0530", " test 2"] 

a.each_slice(3) do |x, y, z| 
    puts "#{x.strip} #{y[/\d\d:\d\d/]} #{z.strip}" 
end 
1

Ein anderer Ansatz:

arr = ["0.5", " 2016-08-25 11:02:00 +0530", " test 1", " 0.75", " 2016-08-25 11:02:00 +0530", " test 2"] 

arr.each_slice(3).map do |x| 
    x[1] = Time.parse(x[1]).strftime("%H:%M"); x.map(&:strip) 
end.map{ |y| puts y.join(' ') } 

0.5 11.02 Test 1
0.75 11.02 Test 2

1

I die Elemente arr in einen String mit einem Zwischenraum zwischen jedem Element verbunden sind, abgetastet dann die Zeichenfolge, um die Ergebnisse zu drei Einfang Gruppen speichern, welches ein Array erzeugte, das zwei Drei-Elemente-Arrays enthielt. Schließlich fügte ich die drei Elemente jedes der beiden Arrays hinzu und druckte das Ergebnis unter Verwendung von puts.

r =/
    (\d+\.\d+) # match a float in capture group 1 
    .+?   # match > 1 of any characters, lazily (?) 
    (\d{1,2}:\d2) # match the time in capture group 2 
    .+?   # match > 1 of any characters, lazily (?) 
    (test\s\d+) # match 'test' followed by > 1 digits in capture group 3 
    /x   # free-spacing regex definition mode 

puts arr.join(' ').scan(r).map { |a| a.join(" ") } 

druckt

0.5 11:02 test 1 
0.75 11:02 test 2 

Die drei Schritte sind wie folgt.

a = arr.join(' ') 
    #=> "0.5 2016-08-25 11:02:00 +0530 test 1 0.75 2016-08-25 11:02:00 +0530 test 2" 
b = a.scan(r) 
    #=> [["0.5", "11:02", "test 1"], 
    # ["0.75", "11:02", "test 2"]] 
c = b.map { |a| a.join(" ") } 
    #=> ["0.5 11:02 test 1", "0.75 11:02 test 2"] 

Dann puts c druckt das oben gezeigte Ergebnis.

Verwandte Themen