C#의 LINQ에서 Distinct의 사용법은?
_____A1: Distinct() 메서드는 LINQ 쿼리에서 컬렉션 내의 중복된 요소를 제거하고 유일한 요소들만 반환하는 메서드입니다. 기본적으로 요소들의 Equals() 및 GetHashCode() 메서드를 사용하여 중복을 판단합니다.
---
Q2: Distinct() 메서드의 기본 사용법은 어떻게 되나요?
A2: 컬렉션(예: List
```csharp
var numbers = new List
var distinctNumbers = numbers.Distinct(); // 결과는 1, 2, 3, 4, 5
```
---
Q3: Distinct()는 어떤 타입에서 사용 가능한가요?
A3: Distinct()는 IEnumerable
---
Q4: 객체 리스트에서 Distinct()를 사용할 때 주의할 점은 무엇인가요?
A4: 사용자 정의 객체(List
---
Q5: 사용자 정의 객체에 맞게 Distinct()를 사용하려면 어떻게 해야 하나요?
A5: 두 가지 방법이 있습니다.
1. 해당 클래스에 Equals()와 GetHashCode()를 오버라이드하여 객체 동등성을 정의.
2. IEqualityComparer
예시:
```csharp
class Person {
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj) {
if (obj is Person other)
return Name == other.Name && Age == other.Age;
return false;
}
public override int GetHashCode() {
return (Name, Age).GetHashCode();
}
}
// 또는 IEqualityComparer 구현
class PersonComparer : IEqualityComparer
return x.Name == y.Name && x.Age == y.Age;
}
public int GetHashCode(Person obj) {
return (obj.Name, obj.Age).GetHashCode();
}
}
// 사용법
var distinctPeople = people.Distinct(new PersonComparer());
```
---
Q6: Distinct() 메서드는 원본 컬렉션을 변경하나요?
A6: 아니요. Distinct()는 원본 컬렉션을 변경하지 않고 중복이 제거된 새 시퀀스를 반환합니다.
---
Q7: Distinct() 결과를 리스트로 받고 싶으면 어떻게 해야 하나요?
A7: Distinct() 결과는 IEnumerable
```csharp
var distinctList = numbers.Distinct().ToList();
```
---
Q8: Distinct()와 DistinctBy()의 차이점은 무엇인가요?
A8: Distinct()는 완전한 객체 단위로 중복을 제거하지만, DistinctBy()는 특정 키(selector) 기준으로 중복을 제거합니다. DistinctBy()는 .NET 6부터 지원됩니다. 예:
```csharp
var distinctByName = people.DistinctBy(p => p.Name);
```
---
Q9: 중복 제거 시 대소문자를 무시하고 싶을 때 어떻게 하나요?
A9: IEqualityComparer
```csharp
var words = new List
var distinctWords = words.Distinct(StringComparer.OrdinalIgnoreCase);
```
---
Q10: Distinct() 내부 동작 원리는 무엇인가요?
A10: Distinct()는 내부적으로 해시 집합(HashSet
---
요약하자면, LINQ의 Distinct()는 중복된 요소를 제거하여 유일한 값만 반환하는 매우 편리한 메서드이며, 사용자 정의 타입에서는 Equals/GetHashCode 오버라이드 또는 IEqualityComparer 구현을 통해 원하는 중복 기준을 정의할 수 있습니다.
LINQ의 다양한 메서드 중 하나인 `Distinct`는 컬렉션에서 중복된 요소를 제거하고 고유한 요소만을 반환하는 데 사용됩니다.
이 메서드는 특히 데이터 집합에서 중복을 처리해야 할 때 유용합니다.
Distinct 메서드의 기본 사용법 `Distinct` 메서드는 `System.Linq` 네임스페이스에 정의되어 있으며, IEnumerable
기본적인 사용법은 다음과 같습니다.
```csharp using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List
`Distinct` 메서드를 호출하면 중복된 값이 제거된 새로운 컬렉션이 반환됩니다.
출력 결과는 다음과 같습니다.
``` 1 2 3 4 5 ``` 사용자 정의 객체에서 Distinct 사용하기 `Distinct` 메서드는 기본 데이터 타입뿐만 아니라 사용자 정의 객체에서도 사용할 수 있습니다.
그러나 이 경우 객체의 동등성을 정의해야 합니다.
기본적으로 `Distinct`는 객체의 참조를 비교하므로, 두 객체가 동일한지 판단하기 위해 `IEquatable
예를 들어, 다음과 같은 `Person` 클래스를 정의할 수 있습니다.
```csharp public class Person { public string Name { get; set; } public int Age { get; set; } public override bool Equals(object obj) { if (obj is Person other) { return this.Name == other.Name && this.Age == other.Age; } return false; } public override int GetHashCode() { return HashCode.Combine(Name, Age); } } ``` 이제 `Person` 객체의 리스트에서 중복된 요소를 제거할 수 있습니다.
```csharp List
커스텀 비교자를 사용한 Distinct 사용자 정의 객체의 경우, `IEqualityComparer
이를 통해 `Distinct` 메서드에 사용자 정의 비교 로직을 적용할 수 있습니다.
```csharp public class PersonComparer : IEqualityComparer
요약 C 의 LINQ에서 `Distinct` 메서드는 중복된 요소를 제거하고 고유한 요소만을 반환하는 데 유용한 도구입니다.
기본 데이터 타입뿐만 아니라 사용자 정의 객체에서도 사용할 수 있으며, 이 경우 객체의 동등성을 정의하는 것이 중요합니다.
`IEqualityComparer
LINQ의 `Distinct` 메서드는 데이터 처리 및 쿼리 작성 시 매우 유용한 기능으로, 다양한 상황에서 활용될 수 있습니다.
작성자:
김수호 [비회원]
| 작성일자: 1년 전
2024-09-09 08:38:59
조회수: 308 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 308 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.