2016-09-24 270 views
0

我有一本字典。一切工作正常,但排序。我甚至嘗試過一個SortedDictionary。按價值排序字典?

這是我正在做的,我有一個字典,其中包含FilePath,FileName好吧。

嗯,我想按價值排序,然後把把(鑰匙)放入一個列表。

這是我的代碼。 (更新:整個方法)。

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是鍵(文件路徑)。這就是爲什麼我一直試圖通過Values(文件名)進行排序的原因。

再次說,它確實對它們進行排序。

這裏是什麼編譯說

℃的例子:/Cat.txt,Cat.txt。
C:/Dog.txt,Dog.txt。
C:/Wolf.txt, Wolf.txt。

但是當我去把它們添加到列表中。

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

+0

只是通過做'列表 myList =新列表()'''那麼你可以通過做'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語句的頂部留下了一段代碼,並且我有if(scriptList.Count < 1){Sort It}。刪除了,現在好走:)