2016-08-24 1 views
2

を追加しましたしようとすると、これらのファイルをループして、 'プレフィックス'(最大文字は_を含まず、リストにない場合はプレフィックスをリストに追加してから、ファイル名全体をその接頭辞の要素。最善の方法は、動的にそのような何かそれから、私はファイルのリストを持っており、それらのファイルのファイル名が、その後に下線をいくつかの文字を含む

これは混乱している可能性がありますので、ここに例があります:

ファイル名の

一覧:

A_ieie.txt 
B_ldld.txt 
C_test.txt 
A_232.txt 
B_file2.txt 
C_345.txt 

だから私は、これらのファイルをループしてそのように接頭辞を取得しています:今

string prefix = fileName.Substring(0, fileName.IndexOf('_')); 

、その接頭語がリストに既にある場合、私はチェック接頭辞、そうでない場合、それを追加します。

List<string> prefixes = new List<string>(); 

if (!prefixes.Contains(prefix)) 
{ 
    prefixes.Add(prefix); 
} 

は、だからここにそのリストに追加されます接頭辞です:

A //not yet seen, add it to list 
B //not yet seen, add it to list 
C //not yet seen, add it to list 
A //already seen, don't add 
B //already seen, don't add 
C //already seen, don't add 

これは簡単ですが、プレフィックスを共有するファイル名をリストに追加する場合はどうなりますか?

これらは動的に追加され、何かになる可能性があるため、手作業で複数のリストを作成することはできません。私は約Listlistsを持っていると思ったが、これを行うには本当に最善の方法ですか?クラスは理想的でしょうか?上記の例の最終目標は、のようなものになるだろう

:あなたは辞書をしたいよう

[0][0] = A_ieie.txt //This is the 'A' list 
[0][1] = A_232.txt 
[1][0] = B_ldld.txt //This is the 'B' list 
[1][1] = B_file2.txt 
[2][0] = C_test.txt //This is the 'C' list 
[2][1] = C_345.txt 

答えて

2

サウンズ:

var list = new Dictionary<string, List<string>>(); 

Keyは、「接頭辞」だろうとValueは次のようになります文字列のリスト(ファイル名)。

EDIT

あなたはファイル名のリストが一意になりたい場合は、おそらく、HashSetのは良いオプションです:あなたが次に>

辞書をしたいよう

var list = new Dictionary<string, HashSet<string>>(); 
+0

ちょっといいアイデアのようです。辞書を忘れてしまった。私はそれを試して、それがどのように動作するかを伝えます。ありがとうございました! – pfinferno

+0

@Lee Gunnもし、ファイル名を繰り返したくないのなら、Dictionary >()は正しいですか? – Parth

+1

ええ、真実、それが問題ならばおそらくリストの代わりにHashSet

1

は、サウンド各リストはキー整数で参照されます(またはリストに「名前をつけて文字列を使用する」)。

public Dictionary<string, List<string>> myBookList = new Dictionary<string, List<string>>(); 
    private void addList(string listName, List<string> contents) 
    { 
     myBookList.Add(listName, contents); 
     //direct add 
     List<string> science_Fiction_Books = new List<string>(); 

     myBookList.Add("Science Fiction", science_Fiction_Books); 
     myBookList["Science_Fiction"].Add("mytitle.txt"); 
     myBookList["Science_Fiction"][0] = "My book title.txt"; 
     string fileLocation = @"c:\mydirectory\mylists\myBookTitle.txt"; 
     myBookList["Science_Fiction"].Add(System.IO.Path.GetFileName(fileLocation)); 
     //etc. 
    } 
どのようにこの約210
+1

いつものように、私はLOLを入力していました... –

+0

あなたはまた、辞書>をalreadySeenをキーとして使うことができます –

1

var textFileNameList = 
    new List<string>{"A_ieie.txt","B_ldld.txt","C_test.txt", 
        "A_232.txt","B_file2.txt","C_345.txt"}; 

     var groupedList = textFileNameList.GroupBy(t => t.Split('_')[0]) 
      .Select(t=> new { 

       Prefix = t.Key, 
       Files = t.Select(file=> file).ToList() 
      }).ToList(); 
1

あなたはこれを達成するためにlinqを使用することができます。

List<string> List = new List<string>() { "A_ieie.txt", "B_ldld.txt", "C_test.txt", "A_232.txt", "B_file2.txt", "C_345.txt" }; 
Dictionary<string, List<string>> Dict = new Dictionary<string, List<string>>(); 
Dict = List.GroupBy(x => x.Split('_')[0]).ToDictionary(x => x.Key, x => x.ToList()); 
関連する問題