2016-09-24 12 views
0

私は辞書を持っています。すべてがうまくいっていますが、ソートしています。私もSortedDictionaryを試したことがあります。値で辞書を並べ替える?

私がやっていることは、FilePath、FileNameが含まれているDictionaryがあります。

私はValueでソートしようとしていて、次に(キー)をリストに入れようとしています。

ここに私のコードです。 (UPDATED:全体のメソッド)。

public static void DisplayScriptListNames(){ 
    scriptsList.Clear(); 
    fileInfo = new DirectoryInfo (Application.dataPath); 

    if (EclecticGlobalSettings._cSharp && isSharp) { 
     sharpFiles = fileInfo.GetFiles ("*.cs", SearchOption.AllDirectories).ToList(); 
    } if(EclecticGlobalSettings._usScripts && !isSharp) { 
     javaFiles = fileInfo.GetFiles ("*.js", SearchOption.AllDirectories).ToList(); 
    } 


    if (EclecticGlobalSettings._cSharp && isSharp) { 
     // C# 
     if (sharpFiles.Count != 0) { 
      foreach (FileInfo i in sharpFiles){ 
       string line = i.Name.ToString(); 
       string checkPath = Path.GetDirectoryName (i.FullName); 
       string assetsPath = checkPath.Substring (i.FullName.IndexOf ("Assets")); 
       if (!assetsPath.Contains("Editor") && !assetsPath.Contains("Standard Assets")) { 
        scriptDictionary.Add(i.FullName,i.Name); 
        scriptsFound += 1; 
       } 
      } 
     } 
    } 

    if(EclecticGlobalSettings._usScripts && !isSharp){ 
     //JS 
     foreach (FileInfo i in javaFiles) { 
      //string line = i.FullName.ToString(); 

      string line = i.Name.ToString(); 
      string checkPath = Path.GetDirectoryName (i.FullName); 
      string assetsPath = checkPath.Substring (i.FullName.IndexOf ("Assets")); 
      if (!assetsPath.Contains("Editor") && !assetsPath.Contains("Standard Assets")) { 
       Debug.Log (i.Name); 
       scriptDictionary.Add(i.FullName,i.Name); 
       scriptsFound += 1; 
      } 
     } 
    } 


    foreach (KeyValuePair<string,string> item in scriptDictionary.OrderBy(key=>key.Value)) { 
     Debug.Log (item); 
     scriptsList.Add (item.Key); 
    } 
    //scriptsList.AddRange (scriptDictionary.Keys); 
    //scriptsList.Sort (Path.GetFileName); 
    //foreach (string ii in scriptsList) { 
    // Debug.Log (ii); 
    // 
    //} 
} 

いいえ、Debug.Log()はUnityのConsole.WriteLineの方法です。そして実際にはそれを並べ替えていると言います。しかし、私がするとき。

scriptsList.Add (item.Key); 

以前と同じように未編成です。 いくつかの簡単なステップがありますか?コンソールは実際にはそれが完全に私がしたいと思う方法を並べ替えていると言うからです。しかし何らかの理由で、scriptsList.Add(item.key)<ファイルへのPATHのために。ソートされていないと言っています。

私はscriptList.Sort()を実行します。しかし、scriptListがキー(File Paths)であることを忘れないでください。だから、私は値(ファイル名)を使って並べ替えようとしています。

もう一度、並べ替えると言います。 /Cat.txt、Cat.txt:

はここ

Cコンパイラ言うの例です。
C:/Dog.txt、Dog.txt。
C:/Wolf.txt、 Wolf.txt。

しかし、私はそれらをリストに追加します。

C:/Wolf.txt。
C:/Dog.txt。
C:/Cat.txt。

+0

'List myList = new List ()'を実行すると、パスからリストを作成するだけで、 'Path.GetFileName(myList [インデックス]) '、なぜあなたはまだそれらの両方が必要になるのか分からない。そのシナリオで 'OrderBy'を使ってあなたのリストを並べ替えることができますが、あなたがそれを必要とするかどうかはわかりません。 – Niklas

+0

あなたはatmを使っているものを絶対に使用しなければなりませんか? – Niklas

+0

変数 'scriptList'のタイプは何ですか?それは 'HashSet 'ですか?もし私が 'var scriptList = scriptDictionary.OrderBy(p => p.Value).Select(p => p.Key).ToList(); 'を実行すると、正しい順序になるからです。 – dbc

答えて

0

私はそれを人から考え出しました!私は完全なダミーのように感じる....私は私のifステートメントの1つの上部にコードの古い部分を残していたし、持っていたif(scriptList.Count < 1){それをソート}。これを削除して今すぐ使えるようになりました:)

関連する問題