2016-09-23 4 views
0

nur fragen, ob es andere Alternativen ist zu verschmelzen Elementen in einem Array vonRuby-Array-Elemente Merging

[[ "Zeit", "Oktober-1-2016"], [ "message", "test Nachricht "], [" host " "localhost"]]

zu

[ "time = Oct-1-2016", "message = Testnachricht"," host = localhost "]

Ich habe es auf array.map {|k,v| "#{k}=#{v}"} genagelt und nur gefragt, ob es andere Möglichkeiten gibt, das oben genannte ohne die Kartenfunktion zu erreichen? Danke yo!

+1

Noch mit 'map' können Sie:' arr.map {| s | auch am ('=')}. –

+0

Ja, ich habe den k, v Teil definitiv überkocht - danke @ sagarpandya82 – b1geyedeer

+1

Natürlich: '[[" time "," Oct-1-2016 "], [" message "," test message "], [" host " , "localhost"]] .each_with_object ([]) {| a, b | b << a.join ('=')} ', aber es ist mühsamer als einfach' map'. –

Antwort

2

Nehmen wir an, Ihr Array ist a. Dann diese Lösung versuchen:

[1] pry(main)> a = [ ["time","Oct-1-2016"], ["message","test message"], ["host","localhost"] ] 
=> [["time", "Oct-1-2016"], ["message", "test message"], ["host", "localhost"]] 

[2] pry(main)> a.map{|k, v| "#{k}=#{v}"} 
=> ["time=Oct-1-2016", "message=test message", "host=localhost"] 

Hm, ich habe keine Ahnung, warum map nicht funktioniert für Sie, aber hier ist ein Beispiel mit inject:

[40] pry(main)> a.inject(Array.new){|acc, el| acc << el.join("="); acc} 
=> ["time=Oct-1-2016", "message=test message", "host=localhost"] 
+0

Danke für den Versuch @retgoat, ich suche nach Alternativen außer der Kartenfunktion, um das Ergebnis in [2] zu erreichen. – b1geyedeer

+0

@ b1geyedeser Ich habe ein weiteres Beispiel hinzugefügt. Hoffe das wird für dich funktionieren. – retgoat

+0

Danke, das ist eine gute Alternative, nur für die Rekordkarte funktioniert, aber wie ich bereits erwähnt habe ich mich gefragt, ob es andere Möglichkeiten gibt, die gleiche Ausgabe als Karte zu erreichen.Tut mir leid, wenn ich jeden verärgert habe. – b1geyedeer

1

Hier ist eine Möglichkeit, eine Endlos-Schleife mit nach innen ein Enumerator und unter Verwendung der cycle Methode. Dann verwenden Sie enum.take arr.size, um alle Ihre neuen Elemente in einem Array zu erhalten.

arr = [ ["time","Oct-1-2016"], ["message","test message"], ["host","localhost"] ] 
ar = arr.cycle 

enum = Enumerator.new do |y| 
    loop do 
    y << ar.next.join('=') 
    end 
end 

enum.take arr.size 
#=> ["time=Oct-1-2016", "message=test message", "host=localhost"]