2016-04-11 9 views
0

3番目以降のすべてのインデックスの値に対応します。私は現在、このようにそれをやっている:配列インデックス

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

これは(おそらく私が直接、別のオブジェクトの初期化コードにこれを入れたいとnewArray事前に作成せずに)1行で行うことができるように私は感じます。これは可能ですか?

+0

を使用します。 Rubyでは、セミコロン、キーワード、または場合によっては何も置き換えずに、すべてのプログラムのすべての改行をいつでも削除することができます。あなたの場合: 'newArray = [];配列[2 ..- 1] .each do | item | newArray << hash [item] end':行:1行。 –

答えて

3

は、あなたはそれを1行をしたい場合は、単に改行を削除し、Hash#values_at

hash.values_at *array[2..-1] 
# => [3, 4, 5, 6] 
0
hash.keep_if {|k,v| array.slice(2, array.length-2).index(k) }.values 

または

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

あなたは、元のハッシュ値この程度

1

方法を維持する必要がある場合は?

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

期待した出力例を投稿できますか?

0
array[2..-1].inject([]) {|ary, x| ary << hash[x]} 
関連する問題