2017-07-11 9 views
-3

基本的に私は2つのデータ構造を持っています。単純化のために、それらが両方とも1次元アレイであると仮定する。すべての機能が正しく定義されていると仮定すると、私はこれにアプローチする方法が分からないエラーが発生する配列の値をフィルターにかける

Array1.delete_if(Array2.find(element in array 1) results in error) 

のような何かをしたいです。私は救助声明などを試みましたが、私はまだエラーに終わります。メソッド呼び出しによってエラーが発生した場合に、配列の要素をフィルタリングする効率的で簡単な方法はありますか?

ありがとうございました。

+1

「エラーの結果」の意味は何ですか? 'find'が失敗したら?この文脈での誤りは何ですか?それは例外か戻り値の特定の型ですか? – tadman

+0

申し訳ありませんが、明確ではない - 私は例外を意味します。具体的にはNoMethodErrorsが発生していますが、一般に発生する例外はすべてリストから除外されます。 findメソッドは例外を発生させています。私は「正しく見つからない要素」という例外を除外したいと考えています。 –

+0

「例外を除外する」とはどういう意味ですか? – ndn

答えて

0

要素をフィルタリングするための正しい方法は次のようになります。

first_array - second_array 

あなたは別の1からすべての要素を見つけた場合にエラーが発生する場合:

raise 'error' unless (first_array & second_array).empty? 

最後の試み:

first_array.select { |element| condition_with_second_array(element) rescue false } 
1

あなたが探している帽子はその後、このです:

それは findを呼び出すときに例外が発生するものを削除します
array1.delete_if do |e| 
    array2.find(e) and false 

rescue 
    true 
end 

+0

'find'を呼び出すときに何か例外が発生することがあります(' array2'は実際に配列です)? – ndn

+0

代わりに 'keep_if'や' select! 'を使わないのはなぜですか?制御フロー 'と'はちょうどその場所では外れているようです。 'not(array2.find(e))'もきれいに見えます。 – engineersmnky

+0

@engineersmnkyこれらはどちらも有効な選択肢ですが、私は元の質問ができるだけ控えめに変更を保存しなければならないものを使用しています。 – tadman

関連する問題