IT story

.NET에는 List a에 List b의 모든 항목이 포함되어 있는지 확인할 수있는 방법이 있습니까?

hot-time 2020. 9. 6. 12:04
반응형

.NET에는 List a에 List b의 모든 항목이 포함되어 있는지 확인할 수있는 방법이 있습니까?


다음과 같은 방법이 있습니다.

namespace ListHelper
{
    public class ListHelper<T>
    {
        public static bool ContainsAllItems(List<T> a, List<T> b)
        {
            return b.TrueForAll(delegate(T t)
            {
                return a.Contains(t);
            });
        }
    }
}

그 목적은 목록에 다른 목록의 모든 요소가 포함되어 있는지 확인하는 것입니다. 이와 같은 것이 이미 .NET에 내장되어있는 것처럼 보일 것입니다. 그럴 경우 기능을 복제하고 있습니까?

편집 : Mono 버전 2.4.2 에서이 코드를 사용하고 있다고 미리 밝히지 않은 것에 대해 사과드립니다.


.NET 3.5를 사용하는 경우 간단합니다.

public class ListHelper<T>
{
    public static bool ContainsAllItems(List<T> a, List<T> b)
    {
        return !b.Except(a).Any();
    }
}

어떠한 요소가 있는지가 검사에 b한하지 a- 후 결과 반전.

메서드를 클래스보다 제네릭 으로 만드는 것이 약간 더 관습 적 이며 List<T>대신 필요로 할 이유가 IEnumerable<T>없으므로 이것이 선호 될 것입니다.

public static class LinqExtras // Or whatever
{
    public static bool ContainsAllItems<T>(this IEnumerable<T> a, IEnumerable<T> b)
    {
        return !b.Except(a).Any();
    }
}

재미로 @JonSkeet의 대답 을 확장 방법으로 사용하십시오.

/// <summary>
/// Does a list contain all values of another list?
/// </summary>
/// <remarks>Needs .NET 3.5 or greater.  Source:  https://stackoverflow.com/a/1520664/1037948 </remarks>
/// <typeparam name="T">list value type</typeparam>
/// <param name="containingList">the larger list we're checking in</param>
/// <param name="lookupList">the list to look for in the containing list</param>
/// <returns>true if it has everything</returns>
public static bool ContainsAll<T>(this IEnumerable<T> containingList, IEnumerable<T> lookupList) {
    return ! lookupList.Except(containingList).Any();
}

.NET 4에 포함됨 : Enumerable.All

public static bool ContainsAll<T>(IEnumerable<T> source, IEnumerable<T> values)
{
    return values.All(value => source.Contains(value));
}

다른 방법을 사용할 수도 있습니다. 같음을 재정의하고 이것을 사용하십시오.

public bool ContainsAll(List<T> a,List<T> check)
{
   list l = new List<T>(check);
   foreach(T _t in a)
   {
      if(check.Contains(t))
      {
         check.Remove(t);
         if(check.Count == 0)
         {
            return true;
         }
      }
      return false;
   }
}

참고 URL : https://stackoverflow.com/questions/1520642/does-net-have-a-way-to-check-if-list-a-contains-all-items-in-list-b

반응형