Heim > Backend-Entwicklung > C++ > Wie kann ich mit Lambda/LINQ eine Sammlung effizient basierend auf mehreren Schlüsselwörtern filtern?

Wie kann ich mit Lambda/LINQ eine Sammlung effizient basierend auf mehreren Schlüsselwörtern filtern?

DDD
Freigeben: 2025-01-21 11:52:14
Original
996 Leute haben es durchsucht

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

Verwenden Sie Lambda/LINQ, um Sätze mit mehreren Schlüsselwörtern effizient zu filtern

Frage:

Wie kann man Lambda-Ausdrücke oder LINQ effizient verwenden, um eine Sammlung basierend auf mehreren Schlüsselwörtern zu filtern?

Lösung:

Das in der Frage angegebene Beispiel verdeutlicht die Notwendigkeit, in einem Feld (hier dem Feld „Kommentare“) nach mehreren Schlüsselwörtern zu suchen. Zwar gibt es Beispiele für die Filterung auf der Grundlage eines einzelnen Schlüsselworts, die Ausweitung dieser Logik auf mehrere Schlüsselwörter erfordert jedoch einen leistungsfähigeren Ansatz.

Lambda-Ausdrucksmethode:

Wir können die in der Antwort bereitgestellte Erweiterungsmethode verwenden, um diese Anforderung mithilfe von Lambda-Ausdrücken zu erfüllen:

var newList = MainList
   .FilterByItems(keywords, (m, k) => m.Comments.Contains(k), true)
   .ToList();
Nach dem Login kopieren

LINQ-Methode:

Alternativ können wir LINQ verwenden, um das gleiche Ergebnis zu erzielen:

var newList = MainList.Where(m => keywords.Any(k => m.Comments.Contains(k)));
Nach dem Login kopieren

Erklärung:

Beide Methoden verwenden die FilterByItems-Erweiterungsmethode in der QueryableExtensions-Klasse. Diese Methode akzeptiert eine Sammlung von Elementen, ein anzuwendendes Prädikat und einen booleschen Wert, der angibt, ob eine „OR“- oder „AND“-Operation ausgeführt werden soll.

In unserem Beispiel übergeben wir die Liste der Schlüsselwörter als Elemente, ein Prädikat, das prüft, ob das Kommentarfeld jedes Schlüsselwort enthält, und isOr auf true setzt, um eine „OR“-Operation durchzuführen. Dadurch wird sichergestellt, dass ein Datensatz, der eines der angegebenen Schlüsselwörter enthält, in den Ergebnissen enthalten ist.

Implementierung der FilterByItems-Erweiterungsmethode:

Die FilterByItems-Methode wird mithilfe der ExpressionReplacer-Klasse implementiert, die es uns ermöglicht, einen Teil des Ausdrucks zu ersetzen. Dies wird verwendet, um ein Prädikat zu generieren, das prüft, ob jedes Schlüsselwort vorhanden ist.

Beispielverwendung:

Um die FilterByItems-Methode zu verwenden, stellen wir einfach die zu filternde Sammlung und eine Liste der zu überprüfenden Schlüsselwörter bereit und setzen isOr optional auf true für eine „OR“-Operation oder auf false für eine „AND“-Operation.

// 过滤“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);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich mit Lambda/LINQ eine Sammlung effizient basierend auf mehreren Schlüsselwörtern filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage