0

私はルビーハッシュを持っています:

VALS = { :one => "One", :two => "Two" }

および配列:

array2 = ["hello", "world", "One"]

質問: VALS の値と正確に一致する array2 の値のみを取得するように、新しい array1 を設定するにはどうすればよいですか?

たとえば、私は試しました:

array2.each_with_index do |e,i| 
array1 << e if VALS[i] ~= e
end

他のものと一緒に、どれも機能しません。新入り。

ありがとう


素晴らしい!しかし、私が試したとき:

p array.select { |i| hash.has_value? i ? array[i+1] : "foo"}

fixnum を変換できないというエラーが発生しました。私は何かが欠けているに違いない。

4

3 に答える 3

6

両方のコレクションが大きい場合、ネストされたループを使用すると非常に遅くなります。コンテンツをセットとして扱う方が良いです:

array1 = VALS.values & array2
print array1

出力:

One
于 2009-12-14T05:36:34.453 に答える
0

オプションは次のとおりです。

hash = { :one => "One", :two => "Two" }
array = ["hello", "world", "One"]

p array.select { |i| hash.has_value? i }
# >> ["One"]
于 2009-12-14T05:38:13.200 に答える
0

とった!

array.select do |i|
  if VALS.has_value? i
    result << array[array.index(i)+1]
  end
end
于 2009-12-14T07:09:47.433 に答える