0

特定の「ポリシー」の写真を含むフォルダがあります。各ポリシーには、任意の数の画像を含めることができます。フォルダには、任意の数のポリシーを含めることもできます。

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

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

ForeachポリシーGROUPで、(このグループ内のファイルの)ARRAYを受け取り、特定のアクションを実行するメソッド(CreateTiffFile())を実行したいと思います。

上記の例では、メソッドは2回実行されます(2つの異なるポリシーがあるため)。また、2つの異なる配列があります。1つのアレイにはVAH007157100の画像(この場合は3つ)が含まれ、もう1つのアレイ(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

解決策はこれに近いです:

// 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 に答える
0
string CalcGroup(string filename) { ... }
string CreateTiffFile(IEnumerable<string> filesInGroup) { ... }
//...
files.GroupBy(CalcGroup).ToList().ForEach(CreateTiffFile);
于 2012-08-13T23:31:54.510 に答える