C# 팁: SortedSet를 사용하여 중복을 방지하고 항목을 정렬합니다.
14356 단어 csharp
HashSet<T>
개체를 사용하여 중복 없이 항목 모음을 만들 수 있습니다.동일한 유형의 항목 목록에서 중복 항목을 제거하는 것은 매우 유용합니다.
항목을 항상 정렬했는지 어떻게 확인할 수 있습니까? 답은 간단합니다.
SortedSet<T>
!HashSet: 중복이 없는 컬렉션
단순
HashSet
은 중복 없이 정렬되지 않은 항목 모음을 만듭니다.이 예
var hashSet = new HashSet<string>();
hashSet.Add("Turin");
hashSet.Add("Naples");
hashSet.Add("Rome");
hashSet.Add("Bari");
hashSet.Add("Rome");
hashSet.Add("Turin");
var resultHashSet = string.Join(',', hashSet);
Console.WriteLine(resultHashSet);
다음 문자열을 출력합니다: Turin,Naples,Rome,Bari. 삽입된 항목의 순서는 유지됩니다.
SortedSet: 중복이 없는 정렬된 컬렉션
이러한 항목을 정렬하기 위해 두 가지 접근 방식이 있습니다.
항목 추가를 완료하면 컬렉션을 간단히 정렬할 수 있습니다.
var hashSet = new HashSet<string>();
hashSet.Add("Turin");
hashSet.Add("Naples");
hashSet.Add("Rome");
hashSet.Add("Bari");
hashSet.Add("Rome");
hashSet.Add("Turin");
var items = hashSet.ToList<string>().OrderBy(s => s);
var resultHashSet = string.Join(',', items);
Console.WriteLine(resultHashSet);
또는 더 좋은 방법은 올바른 데이터 구조를 사용하는 것입니다. a
SortedSet<T>
var sortedSet = new SortedSet<string>();
sortedSet.Add("Turin");
sortedSet.Add("Naples");
sortedSet.Add("Rome");
sortedSet.Add("Bari");
sortedSet.Add("Rome");
sortedSet.Add("Turin");
var resultSortedSet = string.Join(',', sortedSet);
Console.WriteLine(resultSortedSet);
두 결과 모두 Bari,Naples,Rome,Turin을 인쇄합니다. 그러나 두 번째 접근 방식은 전체 목록을 정렬할 필요가 없습니다. 시간과 메모리 측면에서 더 효율적입니다.
맞춤 정렬 규칙 사용
SortedSet
와 같은 사용자 정의 개체와 함께 User
를 사용하려면 어떻게 해야 합니까?public class User {
public string FirstName { get; set; }
public string LastName { get; set; }
public User(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}
물론 다음과 같이 할 수 있습니다.
var set = new SortedSet<User>();
set.Add(new User("Davide", "Bellone"));
set.Add(new User("Scott", "Hanselman"));
set.Add(new User("Safia", "Abdalla"));
set.Add(new User("David", "Fowler"));
set.Add(new User("Maria", "Naggaga"));
set.Add(new User("Davide", "Bellone"));//DUPLICATE!
foreach (var user in set)
{
Console.WriteLine($"{user.LastName} {user.FirstName}");
}
그러나 오류가 발생합니다. 우리 클래스는 사물을 비교하는 방법을 모릅니다!
이것이
User
인터페이스를 구현하도록 IComparable
클래스를 업데이트해야 하는 이유입니다.public class User : IComparable
{
public string FirstName { get; set; }
public string LastName { get; set; }
public User(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public int CompareTo(object obj)
{
var other = (User)obj;
var lastNameComparison = LastName.CompareTo(other.LastName);
return (lastNameComparison != 0)
? lastNameComparison :
(FirstName.CompareTo(other.FirstName));
}
}
이런 식으로 모든 것이 예상대로 작동합니다.
Abdalla Safia
Bellone Davide
Fowler David
Hanselman Scott
Naggaga Maria
두 번째 Davide Bellone은 복제품이므로 사라졌습니다.
이 기사는 Code4IT에 처음 게재되었습니다.
마무리
강력하고 성능이 뛰어난 애플리케이션을 구축하려면 올바른 데이터 유형을 선택하는 것이 중요합니다.
이 문서에서는
SortedSet
를 사용하여 컬렉션에 항목을 삽입하고 항목이 중복 없이 정렬되도록 했습니다.나는 그것을 프로젝트에서 사용한 적이 없습니다. 그래서 내가 그걸 어떻게 알았지? 방금 내가 사용하고 있던 라이브러리를 탐색했습니다!
때때로 몇 분 동안 문서를 읽고 가장 일반적인 라이브러리를 살펴보는 등의 작업을 수행하십시오. 존재한다고 생각하지 못한 많은 항목을 찾을 수 있습니다!
당신의 코드로 장난감! 그것을 탐험하십시오. 호기심을 가지세요.
그리고 재미있게 보내세요!
🐧
Reference
이 문제에 관하여(C# 팁: SortedSet를 사용하여 중복을 방지하고 항목을 정렬합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bellonedavide/c-tip-use-a-sortedset-to-avoid-duplicates-and-sort-items-3pco텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)