1

ハッシュ値に基づいて、配列とハッシュの共通部分を配列に取り込もうとしています。

array2 = ["hi","world","One"]
VALS = {:one => "One", :two => "Two"}
array2 = VALS.values & array2
print array2

ハッシュ値 と の交差に対しては正常に機能しますが、代わりにからの要素をarray2[i]入力したい場合は、失われます。array2[i+1]array2

また試しました:

array2.select { |i| VALS.has_value? i ? array2[i+1] : nil }

しかし、運がありません。

何か案は?

4

3 に答える 3

0

配列を一連の内部キーと値、またはvalの逆数への外部キーとして処理しようとしているように思えます。したがって、あなたの例からの正しい結果は次のようになります。

{"hi" => "World", "One" => :one}

そうですか?もしそうなら、ここで:

invertedvals = vals.invert
Hash[*array2.map {|x| [x,invertedvals[x]]}.flatten.compact]

そうでない場合は、どのような結果を生成しようとしているのかを明確にしてください...

于 2009-12-14T14:45:09.283 に答える
0
array = []
array2.each_with_index{|v,i| array << (VALS.has_value? i ?  array2[i+1] : nil)}
于 2009-12-14T06:41:30.933 に答える
0

これが私自身の質問に対する答えとして私が最終的に得たものです:

array1.each do |i|
   puts "#"*5 + i + "#"*5 if !array2.include? i
  if array2.include? i
    result << i+":" << array2[array2.index(i)+1]
  end
end

これのためのより高速なアルゴリズムはありますか? 使用したい:

array1 & array2

また、ある時点で注入を使用すると、ベンチマークはそれらのいずれにもほとんど違いを示しませんでした。

于 2009-12-15T22:36:59.950 に答える