1. ホーム
  2. ruby

[解決済み] Rubyで配列から別の配列を引き算する

2023-04-26 16:12:37

質問

作成されたタスクと割り当てられたタスクの2つのアレイがあります。 私は、作成されたタスクの配列からすべての割り当てられたタスクを削除したいと思います。 以下は、私の作業中の、しかし厄介な、コードです。

    @assigned_tasks = @user.assigned_tasks
    @created_tasks = @user.created_tasks

    #Do not show created tasks assigned to self
    @created_not_doing_tasks = Array.new
    @created_tasks.each do |task|
        unless @assigned_tasks.include?(task)
            @created_not_doing_tasks << task
        end
    end

もっといい方法があると思うのですが。それは何ですか? ありがとうございます :-)

どのように解決するのですか?

Rubyでは配列の引き算をすることができます。

[1,2,3,4,5] - [1,3,4]  #=> [2,5]

ary - other_ary → new_ary 配列の差分。

元の配列をコピーして、other_aryにも現れる項目を削除した新しい配列を返します。 を取り除いた新しい配列を返します。順序は元の配列から保持されます。 元の配列から順番が保たれます。

効率化のため、ハッシュやeql? メソッドを使って要素を比較します。

[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]

もし setのような動作が必要な場合は、ライブラリクラスSetを参照してください。

を参照してください。 配列 のドキュメントを参照してください。