Wie rekursiv entfernen Sie alle Schlüssel mit leeren Werten aus (YAML) Hash?

8

Ich habe versucht, alle Hash-Schlüssel in meiner YAML-Datei loszuwerden, die leere (leere) Werte oder leere Hashwerte als Werte haben.

Diese früheren Post half mir dabei es ist fast richtig, aber der rekursive Einzeiler verlässt meine YAML-Dump mit leeren Hashes, wenn es genügend tiefe Verschachtelung gibt.

Ich würde wirklich jede Hilfe bei diesem Thema schätzen. Danke!

%Vor%

Tatsächliche Ausgabe

%Vor%

Gewünschte Ausgabe

%Vor%     
juwalter 12.05.2011, 08:44
quelle

6 Antworten

15
%Vor%     
sawa 12.05.2011 09:00
quelle
4

Hier ist eine allgemeinere Methode:

%Vor%     
code_monkey_steve 04.06.2013 18:31
quelle
3

Ich denke, das ist die korrekteste Version:

%Vor%     
Iazel 13.06.2014 19:34
quelle
1

Ich weiß, dass dieser Thread etwas alt ist, aber ich habe eine bessere Lösung gefunden, die multidimensionale Hashes unterstützt. Es verwendet delete_if? außer seiner mehrdimensionalen und reinigt alles mit einem leeren Wert standardmäßig und wenn ein Block übergeben wird, wird es durch seine Kinder weitergegeben.

%Vor%     
Kelly Becker 10.09.2012 22:14
quelle
0

Nur etwas Verwandtes. Wenn Sie die angegebenen Schlüssel aus dem verschachtelten Hash löschen möchten:

%Vor%

. Sie können es auch weiter anpassen

    
Aitvaras 24.07.2012 08:40
quelle
0
%Vor%

oder wie @ sawa vorgeschlagen, Sie können diesen proc

verwenden %Vor%     
fl00r 12.05.2011 10:25
quelle

Tags und Links