按值排序字典

本文关键字:字典 排序 | 更新日期: 2023-09-27 18:08:50

我有一本字典。一切都很好,除了排序。我甚至试过排序字典。

这就是我所做的,我有一个包含FilePath和FileName的Dictionary

嗯,我正试图排序的值,然后把然后把(键)到一个列表。

这是我的代码。(更新:整个方法).
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是键(文件路径)。这就是为什么我一直试图通过值(文件名)排序。

它再次表示对它们进行排序

下面是一个编译器说的

的例子

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

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

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

按值排序字典

我明白了!我觉得自己像个傻瓜....我在我的一个if语句的顶部留下了一段旧的代码,我有if(scriptList)。数& lt;1){排序}。删除它,现在可以开始了:)