문제

생성 및 할당 된 두 가지 작업이 있습니다. 생성 된 작업 배열에서 할당 된 모든 작업을 제거하고 싶습니다. 내 작업이지만 지저분한 코드는 다음과 같습니다.

    @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

더 나은 방법이 있다고 확신합니다. 무엇입니까? 감사 :-)

도움이 되었습니까?

해결책

루비에서 배열을 빼낼 수 있습니다.

[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 ]

세트와 같은 동작이 필요한 경우 라이브러리 클래스 세트를 참조하십시오.

참조 정렬 선적 서류 비치.

다른 팁

위의 솔루션

a - b

배열의 모든 요소 인스턴스를 삭제합니다 b 배열에서 a.

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

어떤 경우에는 결과가 [1, 2, 3, 3, 5]. 즉, 모든 복제물을 삭제하고 싶지는 않지만 요소 만 개별적으로 만 삭제합니다.

당신은 이것을 달성 할 수 있습니다

class Array
  def delete_elements_in(ary)
    ary.each do |x|
      if index = index(x)
        delete_at(index)
      end
    end
  end
end

테스트

irb(main):198:0> a = [ 1, 1, 2, 2, 3, 3, 4, 5 ]
=> [1, 1, 2, 2, 3, 3, 4, 5]
irb(main):199:0> b = [ 1, 2, 4 ]
=> [1, 2, 4]
irb(main):200:0> a.delete_elements_in(b)
=> [1, 2, 4]
irb(main):201:0> a
=> [1, 2, 3, 3, 5]

두 배열이 정렬되지 않은 경우에도 코드가 작동합니다. 예에서는 배열이 정렬되지만 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top