Was ist die rubinöseste Art, auf geschachtelte Hash-Werte in beliebigen Tiefen zuzugreifen? [Duplikat]

8

Gegeben ein Hash wie:

%Vor%

Ich brauche eine Funktion, um Service / Schlüssel in einigen Fällen und andere / Service / Schlüssel in anderen Fällen zurückzugeben. Ein einfacher Weg besteht darin, den Hash und ein Array von Schlüsseln wie folgt zu übergeben:

%Vor%

Damit dieser Aufruf zu 'cred_secret_abcdefg' führt:

%Vor%

Es scheint, als sollte es einen besseren Weg geben als den, den ich in val_for () geschrieben habe.

    
JD. 06.11.2012, 20:50
quelle

4 Antworten

9
%Vor%

Dies wird eine Ausnahme auslösen, wenn ein Zwischenschlüssel nicht gefunden wird. Beachten Sie auch, dass dies vollständig keys.reduce(hash, :[]) entspricht, aber dies könnte einige Leser sehr verwirren, würde ich den Block verwenden.

    
tokland 06.11.2012, 21:00
quelle
6
%Vor%     
sawa 07.11.2012 00:55
quelle
1
%Vor%     
Andrés 06.11.2012 20:59
quelle
1

Ruby 2.3.0 hat eine neue Methode namens dig für beide% eingeführt. co_de% und Hash , die dieses Problem vollständig löst.

%Vor%

Es gibt Array zurück, wenn der Schlüssel auf einer beliebigen Ebene fehlt.

    
Jesse Sielaff 06.01.2016 03:14
quelle

Tags und Links