C# List는 List에 특정 값이 존재하는지 확인하는 메서드가 여러개 있다.
그중 Contains(), Exists(), Find()에 대해 알아보겠다.
Contains vs Exists vs Find
List<T>.Contains(T)
단순히 매개변수의 내용을 포함하는 요소가 List<T>에 있는지 여부를 확인한다.
있으면 True, 없으면 False를 반환한다.
List<T>.Exists(Predicate<T>)
특정 값을 찾기 위한 조건과 일치하는 요소가 List<T>에 포함되어 있는지 여부를 확인한다.
있으면 True, 없으면 False를 반환한다.
List<T>.Find(Predicate<T>)
특정 값을 찾기 위한 조건과 일치하는 요소가 List<T>에 처음으로 검색된 요소를 반환한다.
검색되지 않으면 T형식의 기본값이 반환된다.
아래 클래스는 이번 예시에 사용된 간단한 비즈니스 오브젝트다.
- PartId는 part를 구별하는데 사용되고, part 이름은 변경 가능하다.
- ToString을 override해주어서 출력값이 보기 편하도록 처리하였다.
public class Part : IEquatable<Part>
{
public string PartName { get; set; }
public int PartId { get; set; }
public override string ToString()
{
return $"ID: {PartId} Name: {PartName}";
}
public override bool Equals(object obj)
{
if (obj == null) return false;
Part objAsPart = obj as Part;
if (objAsPart == null) return false;
else return Equals(objAsPart);
}
public override int GetHashCode()
{
return PartId;
}
public bool Equals(Part other)
{
if (other == null) return false;
return (this.PartId.Equals(other.PartId));
}
}
static void Main(string[] args)
{
List<Part> parts = new List<Part>();
parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
parts.Add(new Part() { PartName = "regular seat", PartId = 1434 });
parts.Add(new Part() { PartName = "banana seat", PartId = 1444 });
parts.Add(new Part() { PartName = "cassette", PartId = 1534 });
parts.Add(new Part() { PartName = "shift lever", PartId = 1634 });
Console.WriteLine();
foreach (Part aPart in parts)
Console.WriteLine(aPart);
}
// 출력 결과
//
// ID: 1234 Name: crank arm
// ID: 1334 Name: chain ring
// ID: 1434 Name: regular seat
// ID: 1444 Name: banana seat
// ID: 1534 Name: cassette
// ID: 1634 Name: shift lever
Contains( )
PartId가 1734인 Part가 있는지 확인해 보았다.
PartId가 1734인 Part는 없기 때문에 False를 반환한다.
Console.WriteLine($"Contains: Part with Id=1734 {parts.Contains(new Part { PartId = 1734, PartName= ""})}");
// 출력 결과
// Contains: Part with Id = 1734 False
Exists( )
PartId가 1444인 Part가 있는지 확인해 보았다.
PartName = "banana seat", PartId = 1444인 Part가 있기 때문에 True를 반환한다.
Console.WriteLine($"Exists: Part with Id=1444: {parts.Exists(x => x.PartId == 1444)}");
// 출력 결과
// Exists: Part with Id = 1444: True
Find( )
PartName이 "seat"를 포함하는지 확인해 보았다.
"seat"를 포함하는 가장 첫번째 요소인 PartName = regular seat의 Part가 반환되었다.
Console.WriteLine($"\nFind: Part where name contains \"seat\": {parts.Find(x => x.PartName.Contains("seat"))}");
// 출력 결과
// Find: Part where name contains "seat": ID: 1434 Name: regular seat
참고 자료
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1.exists?view=net-8.0
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1.contains?view=net-8.0
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1.find?view=net-8.0
'C# > List' 카테고리의 다른 글
[C#] List 메서드 모음 (0) | 2024.07.17 |
---|