> 백엔드 개발 > C++ > Lambda/LINQ를 사용하여 여러 키워드를 기반으로 컬렉션을 효율적으로 필터링하는 방법은 무엇입니까?

Lambda/LINQ를 사용하여 여러 키워드를 기반으로 컬렉션을 효율적으로 필터링하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-21 11:52:14
원래의
999명이 탐색했습니다.

How to Efficiently Filter a Collection Based on Multiple Keywords with Lambda/LINQ?

Lambda/LINQ를 사용하여 여러 키워드가 포함된 세트를 효율적으로 필터링

질문:

람다 표현식이나 LINQ를 효율적으로 사용하여 여러 키워드를 기반으로 컬렉션을 필터링하는 방법은 무엇입니까?

해결책:

질문에 제공된 예는 한 필드(여기서는 '댓글' 필드)에서 여러 키워드를 확인해야 한다는 점을 강조합니다. 단일 키워드를 기반으로 필터링하는 예가 있지만 이 논리를 여러 키워드로 확장하려면 더 강력한 접근 방식이 필요합니다.

람다 표현 방법:

답변에 제공된 확장 메서드를 사용하면 Lambda 표현식을 사용하여 이 요구 사항을 달성할 수 있습니다.

var newList = MainList
   .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true)
   .ToList();
로그인 후 복사

LINQ 방법:

또는 LINQ를 사용하여 동일한 결과를 얻을 수도 있습니다.

var newList = MainList.Where(m => keywords.Any(k => m.Comments.Contains(k)));
로그인 후 복사

설명:

두 방법 모두 QueryableExtensions 클래스의 FilterByItems 확장 방법을 사용합니다. 이 메서드는 항목 컬렉션, 적용할 조건자, "OR" 또는 "AND" 연산을 수행할지 여부를 나타내는 부울 값을 허용합니다.

이 경우에는 키워드 목록을 Comments 필드에 각 키워드가 포함되어 있는지 확인하는 조건자인 항목으로 전달하고 isOr를 true로 설정하여 "OR" 연산을 수행합니다. 이렇게 하면 레코드에 지정된 키워드가 포함되어 있으면 결과에 포함됩니다.

FilterByItems 확장 방법 구현:

FilterByItems 메서드는 표현식의 일부를 바꿀 수 있는 ExpressionReplacer 클래스를 사용하여 구현됩니다. 이는 각 키워드의 존재 여부를 확인하는 조건자를 생성하는 데 사용됩니다.

사용 예:

FilterByItems 메소드를 사용하려면 필터링할 컬렉션과 확인할 키워드 목록을 제공하고 선택적으로 "OR" 연산의 경우 isOr를 true로 설정하거나 "AND" 연산의 경우 false로 설정하면 됩니다.

// 过滤“Comments”字段中的关键词
var filteredList = MainList.FilterByItems(keywords, (m, k) => m.Comments.Contains(k));

// 使用OR操作包含任何匹配关键词的记录
var newList = MainList.FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true);
로그인 후 복사

위 내용은 Lambda/LINQ를 사용하여 여러 키워드를 기반으로 컬렉션을 효율적으로 필터링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿