我有一本字典。一切工作正常,但排序。我甚至嘗試過一個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。
只是通過做'列表 myList =新列表()'''那麼你可以通過做'Path.GetFileName(myList [索引])',不知道爲什麼你會需要這兩個。你可以簡單地在該場景中使用'OrderBy'來訂購你的列表,但我不確定你是否需要這種方式。 –
Niklas
你必須絕對使用你正在使用atm的東西嗎? – Niklas
變量'scriptList'的類型是什麼?它是一個'HashSet'?因爲如果我做'var scriptList = scriptDictionary.OrderBy(p => p.Value).Select(p => p.Key).ToList();'那麼順序是正確的。 –
dbc