LINQ(Language Integrated Query)是 .NET 中用于處理集合的強大工具,它提供了多種方法來簡化數據查詢和操作。以下是一些常用的 LINQ 方法及其功能:
- Where: 根據指定的條件篩選集合中的元素。
var filteredResults = matchResults.Where(m => m.Confidence > 0.5); - Select: 從集合中選擇特定的字段或類型。
var labels = matchResults.Select(m => m.Label1); - Any: 檢查集合中是否存在任何滿足條件的元素。
bool hasMatches = matchResults.Any(m => m.Label1 == "label"&& m.Confidence > 0.6); - All: 檢查集合中的所有元素是否滿足指定條件。
bool allHighConfidence = matchResults.All(m => m.Confidence > 0.5); - First: 返回集合中的第一個元素,或滿足條件的第一個元素。
var firstMatch = matchResults.First(m => m.Confidence > 0.6); - FirstOrDefault: 返回集合中的第一個元素,或滿足條件的第一個元素,如果沒有則返回默認值。
var firstOrDefaultMatch = matchResults.FirstOrDefault(m => m.Confidence > 0.6); - Single: 返回集合中唯一的元素,或滿足條件的唯一元素,如果沒有或有多個則拋出異常。
var singleMatch = matchResults.Single(m => m.Label1 == "uniqueLabel"); - SingleOrDefault: 返回集合中唯一的元素,或滿足條件的唯一元素,如果沒有則返回默認值,如果有多個則拋出異常。
var singleOrDefaultMatch = matchResults.SingleOrDefault(m => m.Label1 == "uniqueLabel"); - Count: 計算集合中元素的數量。
int count = matchResults.Count(m => m.Confidence > 0.5); - Sum: 計算集合中某個字段的總和。
double totalConfidence = matchResults.Sum(m => m.Confidence); - Average: 計算集合中某個字段的平均值。
double averageConfidence = matchResults.Average(m => m.Confidence); - Max: 返回集合中某個字段的最大值。
double maxConfidence = matchResults.Max(m => m.Confidence); - Min: 返回集合中某個字段的最小值。
double minConfidence = matchResults.Min(m => m.Confidence); - OrderBy?和?OrderByDescending: 對集合進行排序。
var orderedResults = matchResults.OrderBy(m => m.Confidence);
var orderedResultsDesc = matchResults.OrderByDescending(m => m.Confidence); - GroupBy: 根據指定的鍵將集合分組。
var groupedResults = matchResults.GroupBy(m => m.Label1); - Distinct: 返回集合中不同的元素。
var distinctLabels = matchResults.Select(m => m.Label1).Distinct();
使用示例:
var matchResults = new List<DetectTXTClass.MatchResult>(); //存儲匹配邊框var DetectResults = new List<DetectTXTClass.DetectResult>(); //存儲制作邊框 //遍歷每個模板文件進行匹配foreach (var templateFile in templateFiles){string label = Path.GetFileNameWithoutExtension(templateFile).Split('_')[0];bool found = matchResults.Any(matchResult => matchResult.Label1 == label && matchResult.Confidence > 0.7);// 使用 LINQ 簡化判斷,滿足條件就返回Trurif (found) //matchResults存在label并且置信度大于0.7,直接跳過{continue; }}