한 목록에서 다른 목록의 항목 제거
다른 항목 목록에서 제거하려는 일반 항목 목록을 탐색하는 방법을 알아 내려고합니다.
가설의 예로 이것을 가지고 있다고합시다.
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
foreach로 list1을 순회하고 List2에 포함 된 List1의 각 항목을 제거하고 싶습니다.
foreach는 인덱스 기반이 아니기 때문에 어떻게 해야할지 잘 모르겠습니다.
다음을 제외하고 사용할 수 있습니다 .
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
List<car> result = list2.Except(list1).ToList();
아마도 임시 변수가 필요하지 않을 수도 있습니다.
List<car> result = GetSomeOtherList().Except(GetTheList()).ToList();
참고 Except
하거나 목록을 수정하지 않습니다는 - 그것은 결과에 새로운 목록을 만듭니다.
List<T>
클래스를 사용하면 Remove
함수 를 사용하여 인덱스가 아닌 값으로 항목을 제거 할 수 있으므로 인덱스가 필요하지 않습니다 .
foreach(car item in list1) list2.Remove(item);
LINQ 확장 방법을 사용하는 것이 좋습니다 . 한 줄의 코드로 쉽게 수행 할 수 있습니다.
list2 = list2.Except(list1).ToList();
이것은 물론 list2에서 제거하는 list1의 객체가 동일한 인스턴스라고 가정합니다.
필자의 경우 외래 키와 같은 공통 식별자가있는 두 개의 다른 목록이있었습니다. "nzrytmn"에 의해 인용 된 두 번째 해결책 :
var result = list1.Where(p => !list2.Any(x => x.ID == p.ID && x.property1 == p.property1)).ToList();
내 상황에 가장 잘 맞는 사람이었습니다. 이미 등록 된 레코드없이 DropDownList를로드해야했습니다.
감사합니다 !!!
이것은 내 코드입니다.
t1 = new T1();
t2 = new T2();
List<T1> list1 = t1.getList();
List<T2> list2 = t2.getList();
ddlT3.DataSource= list2.Where(s => !list1.Any(p => p.Id == s.ID)).ToList();
ddlT3.DataTextField = "AnyThing";
ddlT3.DataValueField = "IdAnyThing";
ddlT3.DataBind();
LINQ를 사용할 수는 있지만 RemoveAll
방법을 사용하겠습니다 . 나는 그것이 당신의 의도를 더 잘 표현하는 것이라고 생각합니다.
var integers = new List<int> { 1, 2, 3, 4, 5 };
var remove = new List<int> { 1, 3, 5 };
integers.RemoveAll(i => remove.Contains(i));
list1.RemoveAll(l => list2.Contains(l));
솔루션 1 : 다음과 같이 할 수 있습니다 :
List<car> result = GetSomeOtherList().Except(GetTheList()).ToList();
그러나 경우에 따라이 솔루션이 작동하지 않을 수 있습니다. 그것이 작동하지 않으면 내 두 번째 솔루션을 사용할 수 있습니다.
해결책 2 :
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
list1은 기본 목록이고 list2는 보조 목록이며, list2의 항목없이 list1의 항목을 가져 오려고합니다.
var result = list1.Where(p => !list2.Any(x => x.ID == p.ID && x.property1 == p.property1)).ToList();
여기 요 ..
List<string> list = new List<string>() { "1", "2", "3" };
List<string> remove = new List<string>() { "2" };
list.ForEach(s =>
{
if (remove.Contains(s))
{
list.Remove(s);
}
});
참고 URL : https://stackoverflow.com/questions/2745544/remove-items-from-one-list-in-another
'Programing' 카테고리의 다른 글
Ant와 Maven의 차이점 (0) | 2020.05.20 |
---|---|
Java 주석의 / ** 및 / * (0) | 2020.05.20 |
scp를 사용하여 파일을 Amazon EC2 인스턴스에 복사합니까? (0) | 2020.05.20 |
단항 연산자 예상 (0) | 2020.05.20 |
스위프트-절대 값으로 변환 (0) | 2020.05.20 |