C#: 두 목록 항목 비교
교차
Intersect
를 사용하여 소스 목록의 어떤 요소가 비교 목록에도 포함되어 있는지 확인할 수 있습니다.
var source = new List<string>() { "a", "b", "c" };
var compare = new List<string>() { "b", "c", "d" };
var result = source.Intersect(compare);
결과는 아래와 같습니다.
제외하고
Except
를 사용하여 비교 목록에 포함되지 않은 소스 목록의 요소를 확인할 수 있습니다.
var source = new List<string>() { "a", "b", "c" };
var compare = new List<string>() { "b", "c", "d" };
var result = source.Except(compare);
복합형
비교할 속성을 지정하여 복잡한 유형을 사용하여 목록을 비교할 수도 있습니다. 예를 들어 Person
모델을 사용하는 경우 단순히 Intersect
도 Except
도 사용할 수 없습니다. 다음 코드 결과에는 값이 없습니다.
var source = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Nozomi", "Nakamura") };
var compare = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Keiko", "Nakamura") };
var result = source.Intersect(compare);
Console.ReadLine();
public class Person
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
}
비교자 사용
두 방법 모두 비교자를 두 번째 인수로 사용합니다. LastName
로 비교해보자.
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.LastName == y.LastName;
}
public int GetHashCode(Person x)
{
return x.LastName.GetHashCode();
}
}
이 클래스 인스턴스를 Intersect
의 두 번째 인수로 전달합니다.
var result = source.Intersect(compare, new PersonComparer());
IntersectBy 메서드 사용
단순히 키로 요소를 비교하려는 경우 비교자를 만드는 대신 IntersectBy
를 사용할 수 있습니다. 다음 코드는 비교자를 사용하는 것과 동일한 출력을 생성합니다.
var source = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Nozomi", "Nakamura") };
var compare = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Keiko", "Nakamura") };
var result = source.IntersectBy(compare.Select(x => x.LastName), x => x.LastName);
IEquatable 사용
같은 것을 달성하는 다른 방법은 클래스 자체에 대해 IEquatable을 갖는 것입니다.
public class Person: IEquatable<Person>
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public bool Equals(Person? other) => this.LastName == other?.LastName;
public override int GetHashCode() => (LastName).GetHashCode();
}
그런 다음 간단히 Intersect
를 호출할 수 있습니다.
var result = source.Intersect(compare);
요약
구현에 따라 두 목록을 비교하는 방법에는 여러 가지가 있습니다.
Reference
이 문제에 관하여(C#: 두 목록 항목 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kenakamu/c-compare-two-list-items-gec
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var source = new List<string>() { "a", "b", "c" };
var compare = new List<string>() { "b", "c", "d" };
var result = source.Intersect(compare);
Except
를 사용하여 비교 목록에 포함되지 않은 소스 목록의 요소를 확인할 수 있습니다.var source = new List<string>() { "a", "b", "c" };
var compare = new List<string>() { "b", "c", "d" };
var result = source.Except(compare);
복합형
비교할 속성을 지정하여 복잡한 유형을 사용하여 목록을 비교할 수도 있습니다. 예를 들어 Person
모델을 사용하는 경우 단순히 Intersect
도 Except
도 사용할 수 없습니다. 다음 코드 결과에는 값이 없습니다.
var source = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Nozomi", "Nakamura") };
var compare = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Keiko", "Nakamura") };
var result = source.Intersect(compare);
Console.ReadLine();
public class Person
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
}
비교자 사용
두 방법 모두 비교자를 두 번째 인수로 사용합니다. LastName
로 비교해보자.
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.LastName == y.LastName;
}
public int GetHashCode(Person x)
{
return x.LastName.GetHashCode();
}
}
이 클래스 인스턴스를 Intersect
의 두 번째 인수로 전달합니다.
var result = source.Intersect(compare, new PersonComparer());
IntersectBy 메서드 사용
단순히 키로 요소를 비교하려는 경우 비교자를 만드는 대신 IntersectBy
를 사용할 수 있습니다. 다음 코드는 비교자를 사용하는 것과 동일한 출력을 생성합니다.
var source = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Nozomi", "Nakamura") };
var compare = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Keiko", "Nakamura") };
var result = source.IntersectBy(compare.Select(x => x.LastName), x => x.LastName);
IEquatable 사용
같은 것을 달성하는 다른 방법은 클래스 자체에 대해 IEquatable을 갖는 것입니다.
public class Person: IEquatable<Person>
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public bool Equals(Person? other) => this.LastName == other?.LastName;
public override int GetHashCode() => (LastName).GetHashCode();
}
그런 다음 간단히 Intersect
를 호출할 수 있습니다.
var result = source.Intersect(compare);
요약
구현에 따라 두 목록을 비교하는 방법에는 여러 가지가 있습니다.
Reference
이 문제에 관하여(C#: 두 목록 항목 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kenakamu/c-compare-two-list-items-gec
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var source = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Nozomi", "Nakamura") };
var compare = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Keiko", "Nakamura") };
var result = source.Intersect(compare);
Console.ReadLine();
public class Person
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
}
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.LastName == y.LastName;
}
public int GetHashCode(Person x)
{
return x.LastName.GetHashCode();
}
}
var result = source.Intersect(compare, new PersonComparer());
단순히 키로 요소를 비교하려는 경우 비교자를 만드는 대신
IntersectBy
를 사용할 수 있습니다. 다음 코드는 비교자를 사용하는 것과 동일한 출력을 생성합니다.var source = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Nozomi", "Nakamura") };
var compare = new List<Person>() { new Person("Ken", "Nakamura"), new Person("Keiko", "Nakamura") };
var result = source.IntersectBy(compare.Select(x => x.LastName), x => x.LastName);
IEquatable 사용
같은 것을 달성하는 다른 방법은 클래스 자체에 대해 IEquatable을 갖는 것입니다.
public class Person: IEquatable<Person>
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public bool Equals(Person? other) => this.LastName == other?.LastName;
public override int GetHashCode() => (LastName).GetHashCode();
}
그런 다음 간단히 Intersect
를 호출할 수 있습니다.
var result = source.Intersect(compare);
요약
구현에 따라 두 목록을 비교하는 방법에는 여러 가지가 있습니다.
Reference
이 문제에 관하여(C#: 두 목록 항목 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kenakamu/c-compare-two-list-items-gec
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public class Person: IEquatable<Person>
{
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public bool Equals(Person? other) => this.LastName == other?.LastName;
public override int GetHashCode() => (LastName).GetHashCode();
}
var result = source.Intersect(compare);
구현에 따라 두 목록을 비교하는 방법에는 여러 가지가 있습니다.
Reference
이 문제에 관하여(C#: 두 목록 항목 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kenakamu/c-compare-two-list-items-gec텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)