programing

목록에서 빈 문자열을 제거한 다음 목록에서 중복 값을 제거하는 방법

nasanasas 2020. 10. 31. 09:47
반응형

목록에서 빈 문자열을 제거한 다음 목록에서 중복 값을 제거하는 방법


테이블에서 가져온 일부 열 값 목록이 있다고 가정 해 보겠습니다. 빈 문자열과 중복 값을 제거하는 방법은 무엇입니까? 다음 코드를 참조하십시오.

List<string> dtList = dtReportsList.AsEnumerable().Select(dr => dr.Field<string>("column1")).ToList();

이것이 내가 방금 코딩 한 것이지만 Amiram의 코드가 훨씬 더 우아하므로 여기에서 내가 어떻게했는지 답을 선택할 것입니다.

DataTable dtReportsList = someclass.GetReportsList();

        if (dtReportsList.Rows.Count > 0)
       { 


           List<string> dtList = dtReportsList.AsEnumerable().Select(dr => dr.Field<string>("column1")).ToList();
           dtList.RemoveAll(x=>x == "");
           dtList = dtList.Distinct().ToList();         

           rcboModule.DataSource = dtList;
           rcboModule.DataBind();               
           rcboModule.Items.Insert(0, new RadComboBoxItem("All", "All"));


       }

dtList  = dtList.Where(s => !string.IsNullOrWhiteSpace(s)).Distinct().ToList()

빈 문자열과 공백은 null과 같다고 가정했습니다. 그렇지 않은 경우 사용할 수 있습니다 IsNullOrEmpty(공백 허용).s != null


Amiram의 대답은 정확하지만 구현 된 Distinct ()는 N 2 연산입니다. 목록의 각 항목에 대해 알고리즘은 이미 처리 된 모든 요소와 비교하여 고유 한 경우 반환하거나 그렇지 않은 경우 무시합니다. 우리는 더 잘할 수 있습니다.

분류 목록은 선형 시간에 deduped 할 수있다; 현재 요소가 이전 요소와 같으면 무시하고 그렇지 않으면 반환합니다. 정렬은 NlogN이므로 컬렉션을 정렬해야하는 경우에도 다음과 같은 이점이 있습니다.

public static IEnumerable<T> SortAndDedupe<T>(this IEnumerable<T> input)
{
   var toDedupe = input.OrderBy(x=>x);

   T prev;
   foreach(var element in toDedupe)
   {
      if(element == prev) continue;

      yield return element;
      prev = element;      
   }
}

//Usage
dtList  = dtList.Where(s => !string.IsNullOrWhitespace(s)).SortAndDedupe().ToList();

이것은 동일한 요소를 리턴합니다. 그들은 단지 정렬되어 있습니다.


Amiram Korach 솔루션은 실제로 깔끔합니다. 다재다능 함을위한 대안이 있습니다.

var count = dtList.Count;
// Perform a reverse tracking.
for (var i = count - 1; i > -1; i--)
{
    if (dtList[i]==string.Empty) dtList.RemoveAt(i);
}
// Keep only the unique list items.
dtList = dtList.Distinct().ToList();

참고 URL : https://stackoverflow.com/questions/11867070/how-to-remove-empty-strings-from-list-then-remove-duplicate-values-from-a-list

반응형