日期:2014-05-18  浏览次数:21059 次

关于C# 文件查找分组的问题......~~~~~~
在一个文件夹下面有以下一些文件:

1111-20120413010244320-2-3-000011.jpg
1111-20120413010244990_2-3-000012.jpg
1111-20120413010245840-2-3-000013.jpg


1111_20120413012540720-3-3-000011.jpg
1111_20120413012541540_3-3-000012.jpg

1111-20120413012932120-2-3-000011.jpg
1111-20120413014528000-3-3-000011.jpg

1111_20120413022749400_1-3-000011.jpg
1111_20120413022751210_1-3-000012.jpg
1111-20120413022752290-1-3-000013.jpg

1111_20120413022749400_1-3-000021.jpg
1111_20120413022751210_1-3-000022.jpg
1111-20120413022752290-1-3-000023.jpg

文件名末位的1、2、3为一组图片,
找出以上文件中,第3项内容相同且第5项编号(前5位,例如00001)相同的1、2、3三张图片,列出三个文件名,其余不足3张的则删除处理,应得到以下三组结果:

1111-20120413010244320-2-3-000011.jpg,1111-20120413010244990_2-3-000012.jpg,1111-20120413010245840-2-3-000013.jpg

1111_20120413022749400_1-3-000011.jpg,1111_20120413022751210_1-3-000012.jpg,1111-20120413022752290-1-3-000013.jpg

1111_20120413062749400_1-3-000021.jpg,1111_20120413062751210_1-3-000022.jpg,1111-20120413062752290-1-3-000023.jpg


------解决方案--------------------
上述分为5组。判断每组中是否个数为3,不为3的排出。剩下的就是以上的结果了
------解决方案--------------------
这些文件名读到数组中后,最好做一个排序,这样方便你顺序遍历判断,排序后,逐个判断不难吧,你的规则很简单
------解决方案--------------------
C# code
var query = from x in Directory.GetFiles("X:\\path", "*-*-*-*-*.jpg", SearchOption.TopDirectoryOnly)
            group x by x.Split('-')[2] + x.Split('-')[3] into g
            where g.Count() > 3
            select g;
foreach (var item in query)
{
    Console.WriteLine(string.Join(", ", item));
}

------解决方案--------------------
探讨


------解决方案--------------------
探讨
上述分为5组。判断每组中是否个数为3,不为3的排出。剩下的就是以上的结果了