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 简化判断,满足条件就返回Trur
if (found) //matchResults存在label并且置信度大于0.7,直接跳过
{
continue;
}
}