2014-01-14 7 views
1

두 목록이 있습니다. 첫 번째 팀 구성원은 모두 목록 1이고 초 팀 구성원은 목록 2입니다. 내가 선택을 제거하고 싶습니다 팀원 목록 2목록 1 여기 내 코드이지만 은 없습니다. 학생들은 제거되지 않습니다.Diffculty 목록에서 항목을 제거

foreach (var list in list2.ToList()) 
{ 
    if (list1.Contains(list)) 
    { 
     list1.Remove(list); 
    } 
} 
+1

체크를 해결할 수 있다고 생각 나를 위해 일한이 밖으로 http://stackoverflow.com/questions/20562765/difficulty-in-removing-items-from -list? rq = 1 – Coderz

답변

4

목록 1에서 항목을 제거합니다 다음은

list1.RemoveAll(l => list2.Contains(l)); 

대체 솔루션 - (- 또한 제거 중복 주)는리스트 2에서 항목을 제외 목록 1의 항목과 새 목록 생성 할 수 있습니다 :

var result = list1.Except(list2).ToList(); 

결과를 열거하면 목록을 작성할 필요가 없습니다. ToList() 호출을 제거 할 수 있습니다.


참고 : 다음 기본적으로 사용자 정의 객체 대신 기본 유형 (INT, 문자열 등)을 취급하는 경우 개체가 참조에 의해 비교됩니다. 나는. 객체의 모든 필드가 동일하지만 클래스의 다른 인스턴스 인 경우, 동일하지 않은 것으로 간주됩니다. 필드의 값으로 개체를 비교하려면 클래스의 EqualsGetHashCode 메서드를 무시하거나 클래스에 대한 사용자 지정 비교자를 만들어야합니다.

+0

그럼 네가 미안해. – WhileTrueSleep

1

목록에 문자열이 포함되어 있으면 코드가 작동해야합니다. 귀하의 두 목록에 각 학생마다 다른 개체가 포함되어있는 것 같습니다. list1에있는 Jim의 개체는 list2와 같은 Jim 개체가 아닙니다.

0

이 코드는 내가이 문제

List<String> planguages=new ArrayList<String>(); 
    planguages.add("Ajax"); 
    planguages.add("Java"); 
    planguages.add("Python"); 

    List<String> planguages2=new ArrayList<String>(); 
    planguages2.add("Ajax"); 
    planguages2.add("Java"); 
    planguages2.add("Python"); 
    planguages2.add("C#"); 
    planguages2.add("c++"); 

    if(planguages2.containsAll(planguages)){ 
     planguages2.removeAll(planguages); 
     System.out.println(planguages2.size()); 
     System.out.println("ok"); 
    }else{ 
     System.out.println("nok"); 
    } 
관련 문제