4

写真付きのフォルダがあります:

フォルダー1:

ファイル:

ABC-138923
ABC-3223
ABC-33489
ABC-3111
CBA-238923
CBA-1313
CBA-1313
DAC-38932
DAC-1111
DAC-13893
DAC-23232 
DAC-9999

このフォルダを調べて、各画像のプレフィックスがいくつあるかを数えたいと思います。

たとえば、上記のプレフィックスABCの写真が4枚、プレフィックスCBAの写真が3枚あります。

これをループする方法を理解するのに苦労しています。誰でも私に手を差し伸べることができますか?

4

4 に答える 4

4

ループではありませんが、より明確で読みやすくなっています。

string[] fileNames = ...; //some initializing code
var prefixes = fileNames.GroupBy(x => x.Split('-')[0]).
    Select(y => new {Prefix = y.Key, Count = y.Count()});

更新:

各プレフィックスのカウントを表示するには:

foreach (var prefix in prefixes)
{
    Console.WriteLine("Prefix: {0}, Count: {1}", prefix.Prefix, prefix.Count);
}
于 2012-07-17T15:54:52.940 に答える
1

これは「foreach」ループです。

var directoryPath = ".\Folder1\";
var prefixLength = 3;
var accumulator = new Dictionary<string, int>();

foreach (var file in System.IO.Directory.GetFiles(directoryPath)) {
    var prefix = filefile.Replace(directoryPath, string.Empty).Substring(0, prefixLength);

    if (!accumulator.ContainsKey(prefix))
    {
        accumulator.Add(prefix, 0);
    }

    accumulator[prefix]++;
}

foreach(var prefix in accumulator.Keys) {
    Console.WriteLine("{0}: {1}", prefix, accumulator[prefix]);
}
于 2012-07-17T16:03:26.000 に答える
0

アルゴリズム:

  1. 辞書を作成します。

    Dictionary<string, int> D;

  2. 以下を使用してディレクトリをループします。

    foreach (var file in System.IO.Directory.GetFiles(dir)) ...

ファイルごとに次の3つの手順を実行します。

  1. プレフィックスを抽出し、一致するキーがに存在するかどうかを確認しDます。TRUEの場合、ステップ3に進みます。
  2. プレフィックスを新しいキーとして、D値とともに挿入します0
  3. キーの値を次のようにインクリメントします1

ディレクトリ全体が処理されたときに結果を表示するには:

foreach (KeyValuePair<string, int> pair in D)
    Console.WriteLine("{0} prefix has {1} files", pair.Key, pair.Value);
于 2012-07-17T15:40:48.837 に答える
0

C#では、

using System.IO;
using System.Collections.Generic;

...

            DirectoryInfo dir = new DirectoryInfo("C:\\yourfolder");
            FileInfo[] files = dir.GetFiles();
            List<string> prefix = new List<string>();
            List<int> count = new List<int>();

            foreach (FileInfo file in files)
            {
                if (prefix.Count > 0)
                {
                    Boolean AddNew = true;
                    for (int i = 0; i < prefix.Count; i++)
                    {
                        if (file.Name.Substring(0, 3) == prefix[i])
                        {
                            count[i]++;
                            AddNew = false;
                        }
                    }
                    if (AddNew)
                    {
                        prefix.Add(file.Name.Substring(0, 3));
                        count.Add(1);
                    }
                }
                else
                {
                    prefix.Add(file.Name.Substring(0, 3));
                    count.Add(1);
                }
            }

...

プレフィックス文字列リストはカウントリストと並列であるため、アクセスするには配列をループすることができます。私はそれをテストまたは最適化していませんが、このルート(c#)を進んでいる場合は、これが出発点になる可能性があります。

于 2012-07-17T16:02:09.217 に答える