0

我有一个包含特定“政策”图片的文件夹。每个策略可能包含任意数量的图片。该文件夹还可以包含任意数量的策略。

VAH007157100-pic1.jpg
VAH007157100-pic2.jpg
VAH007157100-pic3.jpg

WAZ009999200-pic1.jpg
WAZ009999200-pic2.jpg
WAZ009999200-pic3.jpg
WAZ009999200-pic4.jpg
...

对于每个策略组,我想运行一个方法 (CreateTiffFile()),该方法接受一个数组(该组中的文件)并执行某些操作。

在上面的示例中,该方法将运行两次(因为有 2 个不同的策略)。我也会有 2 个不同的数组。一个数组包含 VAH007157100 图片(在本例中为 3 张),另一个数组 (WAZ009999200) 包含 4 张图片。

我将如何在每个组数组上运行此方法?

如果我不够清楚,请告诉我。请记住,每项政策的政策数量和图片数量各不相同,因此我需要考虑到这一点。

为了获得更好的视野(基于上述数据):

CreateTiffFile(array containing VAH007157100 pics);
CreateTiffFile(array containing WAZ009999200 pics);

...

等等。

4

4 回答 4

1

您可以执行以下操作:

IEnumerable<string[]> grouped = theFiles.GroupBy(filename => filename.Split('-')[0])).Select(g => g.ToArray());

foreach(var group in grouped)
    CreateTiffFile(group);
于 2012-08-13T23:26:18.157 回答
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
}
于 2012-08-13T23:26:35.217 回答
0
string CalcGroup(string filename) { ... }
string CreateTiffFile(IEnumerable<string> filesInGroup) { ... }
//...
files.GroupBy(CalcGroup).ToList().ForEach(CreateTiffFile);
于 2012-08-13T23:31:54.510 回答
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"...

编辑:为了清晰起见,代码已经臃肿。您可以像其他海报显示的那样轻松地将其压缩为单行:)

于 2012-08-13T23:30:22.617 回答