2016-12-10 4 views
1

Ich habe ein Array in einer bestimmten Reihenfolge, und möchte einen Hash mit den ungeraden Zahlen des Arrays als Indizes und die gerade als Werte erstellen. Dieser Code macht es perfekt, aber lässt ein Paar Werte aus dem Array aus.Erstellen Sie einen Hash aus einem Array in Ruby

resolv_hash = Hash[*namerslv_array] 
      puts "values in hash" 
      resolv_hash.each do |key, array| 
      puts "#{key} " + array 
      end 

kann mir bitte jemand helfen?

Antwort

3

Ich glaube, Sie wollen:

resolv_hash = namerslv_array.each_slice(2).to_h 

Illustration:

>> array = [1,2,3,4,5,6,7,8,9,0] 
>> array.each_slice(2).to_h 
=> {1=>2, 3=>4, 5=>6, 7=>8, 9=>0} 
+0

Das funktioniert, aber noch fehlt ein Paar oder Einträge ... mein Code-Ausgabe gibt * Datei [/etc/resolv.conf ] aktion create_if_missing (aktuell) * aix_etcresolv [Name-Server] Aktion hinzufügen Werte in Array Name-Server 192.10.201.1 Domäne abc.aus.century.com nameserve r 176.111.1.1 Werte in Hash- Name-Server 176.111.1.1 Domain abc.aus.century.com , wo mein Dateiinhalt ist cat /etc/resolv.conf Name-Server 192.10.201.1 Domain abc.aus.century. com Nameserver 176.111.1.1 – ibellinf

+0

Ahh! es fällt ab, weil der Nameserver-Schlüssel dupliziert ist ??? – ibellinf

+1

Ja, das würde es tun. Schlüssel sind definitionsgemäß eindeutig. Wenn Sie stattdessen versuchen, ein Element mit einem vorhandenen Schlüssel zu einem Hash hinzuzufügen, wird der Wert dieses Schlüssels durch den neuen Wert ersetzt. Wenn Sie doppelte Schlüssel/erste Werte benötigen, können Sie 'namerslv_array.each_slice (2)' verwenden und Ihre Daten als Array-Paare statt als Hash speichern. – moveson

Verwandte Themen