2016-04-11 1 views
0

ein ArrayConverting Array-Indizes auf Objekte in einer Hash in einer Zeile

Gegeben array = ['a','b','c','d','e','f']

und einen Hash

hash = {"a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5,"f"=>6}

Ich mag würde ein neues Array erzeugen, die die Objekte enthält, entspricht dem Wert jedes Index ab dem dritten. Ich tue es derzeit wie folgt aus:

newArray = [] 
array[2..-1].each do |item| 
    newArray << hash[item] 
end 

Ich fühle mich wie dies in einer Zeile durchgeführt werden konnte (möglicherweise ohne die newArray Schaffung vorher, wie ich diese direkt Initialisierungscode des in ein anderes Objekt setzen möchten). Ist das möglich?

+0

verwenden Wenn Sie es eine Zeile tun möchten, entfernen Sie einfach die Zeilenumbrüchen. In Ruby können Sie immer alle Zeilenumbrüche in allen Programmen entfernen, indem Sie sie durch Semikolons, Schlüsselwörter oder manchmal sogar durch nichts ersetzen. In deinem Fall: 'newArray = []; Array [2 ..- 1] .jede | item | newArray << hash [Element] Ende 'Voilà: eine Zeile. –

Antwort

0
hash.keep_if {|k,v| array.slice(2, array.length-2).index(k) }.values 

oder

hash.dup.keep_if {|k,v| array.slice(2, array.length-2).index(k) }.values 

, wenn Sie die ursprünglichen Hash-Werte

1

wie über dieses pflegen müssen?

array[2..-1].map{|x| hash[x]} 

könnten Sie bitte einige erwartete Beispielausgabe posten?

0
array[2..-1].inject([]) {|ary, x| ary << hash[x]}