按值排序字典?

时间:2016-09-24 18:41:30

标签: c# sorting dictionary

我有一本字典。一切都很好,但排序。我甚至尝试过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)&lt;对于文件的PATH。说没有排序。

我会做scriptList.Sort();但请记住,scriptList是键(文件路径)。这就是为什么我一直试图通过值(文件名)进行排序。

再次说,它确实对它们进行了排序。

以下是编译器所说的

的示例
  

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

但是当我把它们添加到列表中时。

  

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

1 个答案:

答案 0 :(得分:0)

我想出来了!我觉得自己就像一个完全虚拟的......我在我的一个if语句的顶部留下了一段旧代码,而且我有,if(scriptList.Count&lt; 1){Sort It}。删除了,现在很好去:)。