You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Linq识别List<Tuple<string,string>>中Item1的重复值?

用Linq找出重复目录对应的文件路径

完全可以通过Linq实现,核心思路是按目录名称分组,筛选出存在重复的分组,再提取对应文件路径,具体代码如下:

方法一:直接获取所有重复目录的文件项

// 示例集合
var fileList = new List<Tuple<string, string>>
{
    Tuple.Create("Docs", @"C:\Files\Docs\file1.txt"),
    Tuple.Create("Pics", @"C:\Files\Pics\pic1.jpg"),
    Tuple.Create("Docs", @"C:\Files\Docs\file2.txt"),
    Tuple.Create("Videos", @"C:\Files\Videos\vid1.mp4"),
    Tuple.Create("Pics", @"C:\Files\Pics\pic2.png")
};

// Linq查询:获取所有Item1重复的项
var duplicateItems = fileList
    .GroupBy(tuple => tuple.Item1) // 按目录名称分组
    .Where(group => group.Count() > 1) // 只保留分组数量>1的(即重复目录)
    .SelectMany(group => group); // 展开分组,得到所有对应文件项

// 遍历处理
foreach (var item in duplicateItems)
{
    Console.WriteLine($"目录: {item.Item1} | 文件路径: {item.Item2}");
}

方法二:先拿重复目录名,再关联文件路径

如果需要先单独拿到重复的目录名称,再匹配对应的文件,可以拆分两步:

// 第一步:提取所有重复的目录名称
var duplicateDirs = fileList
    .GroupBy(t => t.Item1)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);

// 第二步:筛选出这些目录对应的所有文件路径
var duplicateFiles = fileList.Where(t => duplicateDirs.Contains(t.Item1));

代码说明

  • GroupBy:将集合按目录名称(Item1)归类,相同目录的项会被分到同一组
  • Where(g => g.Count() > 1):过滤出元素数量大于1的分组,也就是存在多个文件的重复目录
  • SelectMany:将分组中的所有元素展开为一个扁平集合,直接得到所有重复目录对应的文件项

内容的提问来源于stack exchange,提问作者Craig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:52:11