it-source

목록에 다른 목록이 있는지 확인합니다.

criticalcode 2023. 5. 6. 15:09
반응형

목록에 다른 목록이 있는지 확인합니다.

다음과 같은 매개 변수 목록이 있습니다.

public class parameter
{
    public string name {get; set;}
    public string paramtype {get; set;}
    public string source {get; set;}
}

IEnumerable<Parameter> parameters;

그리고 제가 확인하고 싶은 일련의 문자열들.

string[] myStrings = new string[] { "one", "two"};

파라미터 목록을 반복하여 소스 속성이 myStrings 배열과 동일한지 확인하고 싶습니다.나는 각각의 중첩으로 이것을 할 수 있지만, 나는 내가 linq를 가지고 놀면서 더 좋은 방법으로 그것을 하는 방법을 배우고 싶고, 어디 등과 같이 열거 가능한 확장 방법을 좋아하기 때문에 각각의 중첩이 잘못되었다고 느낄 수 있습니다.이를 위한 보다 우아한 선호 linq/lambda/delegete 방법이 있습니까?

감사해요.

중첩된 데이터를 사용할 수 있습니다.Any()어느 곳에서나 이용할 수 있는 이 수표에 대하여.Enumerable:

bool hasMatch = myStrings.Any(x => parameters.Any(y => y.source == x));

더 큰 컬렉션에서 더 빠른 성능을 발휘하는 것은 프로젝트를 수행하는 것입니다.parameters로.source그런 다음 사용합니다.Intersect내부적으로 a를 사용자HashSet<T>따라서 첫 번째 접근법(네스트된 두 루프에 해당)에 대한 O(n^2) 대신 O(n)에서 검사를 수행할 수 있습니다.

bool hasMatch = parameters.Select(x => x.source)
                          .Intersect(myStrings)
                          .Any(); 

또한 C# 스타일 지침을 준수하도록 클래스 이름과 속성 이름을 대문자로 표시해야 합니다.

다음은 다른 목록에 일치 요소가 있는지 확인하는 샘플입니다.

List<int> nums1 = new List<int> { 2, 4, 6, 8, 10 };
List<int> nums2 = new List<int> { 1, 3, 6, 9, 12};

if (nums1.Any(x => nums2.Any(y => y == x)))
{
    Console.WriteLine("There are equal elements");
}
else
{
    Console.WriteLine("No Match Found!");
}
list1.Select(l1 => l1.Id).Intersect(list2.Select(l2 => l2.Id)).ToList();
var list1 = await _service1.GetAll();
var list2 = await _service2.GetAll();

// Create a list of Ids from list1
var list1_Ids = list1.Select(l => l.Id).ToList();

// filter list2 according to list1 Ids
var list2 = list2.Where(l => list1_Ids.Contains(l.Id)).ToList();

목록이 너무 크고 lamda 식을 사용하면 가져오는 데 시간이 오래 걸립니다. 이 경우 linq를 사용하여 매개 변수 목록을 가져오는 것이 좋습니다.

var items = (from x in parameters
                join y in myStrings on x.Source equals y
                select x)
            .ToList();

언급URL : https://stackoverflow.com/questions/11092930/check-if-listt-contains-any-of-another-list

반응형