我有一个文件夹,其中包含特定“政策”的图片。每个政策可能包含任意数量的图片。该文件夹还可以包含任意数量的策略。
VAH007157100-pic1.jpg
VAH007157100-pic2.jpg
VAH007157100-pic3.jpg
WAZ009999200-pic1.jpg
WAZ009999200-pic2.jpg
WAZ009999200-pic3.jpg
WAZ009999200-pic4.jpg
...
Foreach策略GROUP,我想运行一个方法(CreateTiffFile()),它接收一个ARRAY(该组中的文件)并执行某些操作。
在上面的示例中,该方法将运行两次(因为有2个不同的策略)。我也有2个不同的数组。一个阵列包含VAH007157100图片(本例中为3个)和另一个包含4张图片的阵列(WAZ009999200)。
我如何在每个组数组上运行此方法?
如果我不够清楚,请告诉我。请记住,每个政策的政策数量和图片数量各不相同,因此我需要考虑到这一点。
为了获得更好的愿景(基于上述数据):
CreateTiffFile(array containing VAH007157100 pics);
CreateTiffFile(array containing WAZ009999200 pics);
...
等等。
答案 0 :(得分:1)
您可以执行以下操作:
IEnumerable<string[]> grouped = theFiles.GroupBy(filename => filename.Split('-')[0])).Select(g => g.ToArray());
foreach(var group in grouped)
CreateTiffFile(group);
答案 1 :(得分:1)
假设您有一个名为files
的字符串列表(无论是数组还是其他集合):
var groups = files.GroupBy(s => s.Substring(0, s.IndexOf('-')));
foreach (var group in groups)
{
CreateTiffFile(group.ToArray()); // ToArray() returns a string[] with the file names
}
答案 2 :(得分:0)
解决方案接近于此:
// get the filenames somehow
string[] filenames = ...;
// split the filenames
char[] breaker = new char[]{ '-' };
var policies_and_numbers = filenames.Select(fname => fname.Split(breaker));
// item is an string[]: [0] is policy, [1] is filename
// group them by the policy
var grouped = policies_and_numbers.GroupBy(thearr => thearr[0]);
// ensure the grouped items are kept as arrays
var almostdone = grouped.Select(group => new KeyValuePair<string, string[]>(group.Key, group.ToArray());
// now, the item is KVP, key is the Policy, and the Value is the array of pics
foreach(var pair in almostdone)
CreateTiffFile(pair.Key, pair.Value); // first arg = policyname, second = the array of "pic1.jpg", "pic2.jpg"...
编辑:为了清晰的操作,代码已经膨胀。您可以轻松地将其压缩成单线,就像其他海报所示:)
答案 3 :(得分:0)
string CalcGroup(string filename) { ... }
string CreateTiffFile(IEnumerable<string> filesInGroup) { ... }
//...
files.GroupBy(CalcGroup).ToList().ForEach(CreateTiffFile);