반응형
LINQ Distinct 연산자, 대소 문자 무시?
다음과 같은 간단한 예가 있습니다.
List<string> list = new List<string>() { "One", "Two", "Three", "three", "Four", "Five" };
CaseInsensitiveComparer ignoreCaseComparer = new CaseInsensitiveComparer();
var distinctList = list.Distinct(ignoreCaseComparer as IEqualityComparer<string>).ToList();
CaseInsensitiveComparer가 실제로 대소 문자를 구분하지 않는 비교를 수행하는 데 사용되지 않는 것 같습니다.
즉, distinctList 는 list 와 동일한 수의 항목을 포함 합니다 . 대신에 예를 들어 "Three"와 "three"는 동일한 것으로 간주됩니다.
내가 뭔가를 놓치고 있거나 이것이 Distinct 연산자의 문제입니까?
StringComparer
당신이 필요로하는 것 :
List<string> list = new List<string>() {
"One", "Two", "Three", "three", "Four", "Five" };
var distinctList = list.Distinct(
StringComparer.CurrentCultureIgnoreCase).ToList();
(또는 비교하는 데이터에 따라 불변 / 서수 등)
[가장 간결한 접근 방식을 원하면 Marc Gravells 답변 참조]
Bradley Grainger의 조사와 좋은 피드백을받은 후 다음 IEqualityComparer를 구현했습니다. 대소 문자를 구분하지 않는 Distinct () 문을 지원합니다 (이 인스턴스를 Distinct 연산자에 전달하기 만하면됩니다).
class IgnoreCaseComparer : IEqualityComparer<string> { public CaseInsensitiveComparer myComparer; public IgnoreCaseComparer() { myComparer = CaseInsensitiveComparer.DefaultInvariant; } public IgnoreCaseComparer(CultureInfo myCulture) { myComparer = new CaseInsensitiveComparer(myCulture); } #region IEqualityComparer<string> Members public bool Equals(string x, string y) { if (myComparer.Compare(x, y) == 0) { return true; } else { return false; } } public int GetHashCode(string obj) { return obj.ToLower().GetHashCode(); } #endregion }
Here is a far simpler version.
List<string> list = new List<string>() { "One", "Two", "Three", "three", "Four", "Five" };
var z = (from x in list select new { item = x.ToLower()}).Distinct();
z.Dump();
## Distinct Operator( Ignoring Case) ##
string[] countries = {"USA","usa","INDIA","UK","UK" };
var result = countries.Distinct(StringComparer.OrdinalIgnoreCase);
foreach (var v in result)
{
Console.WriteLine(v);
}
OutPut will Be
USA
INDIA
UK
참고URL : https://stackoverflow.com/questions/283063/linq-distinct-operator-ignore-case
반응형
'programing tip' 카테고리의 다른 글
ensureSuccessStatusCode 사용 및 발생하는 HttpRequestException 처리 (0) | 2020.09.09 |
---|---|
열거 형이 Swift의 프로토콜을 준수하도록 만드는 방법은 무엇입니까? (0) | 2020.09.09 |
aspx 페이지의 if 문 (0) | 2020.09.09 |
일시적으로 auto_now / auto_now_add 비활성화 (0) | 2020.09.09 |
불법 배포로부터 소프트웨어를 어떻게 보호합니까? (0) | 2020.09.09 |