我有兩個或更多的文件,我想比較。我正在尋找具有最高價值的文件。請告訴我一個簡短而親切的方法來獲取這個命名方案的最新文件:字符串比較文件名與數字
update_12345.log
update_23456.log
update_34567.log <- get this one
我能明顯分解,並比較數字,但後來我跟蹤我指的是哪些文件。儘可能避免創建不必要的操作。
我有兩個或更多的文件,我想比較。我正在尋找具有最高價值的文件。請告訴我一個簡短而親切的方法來獲取這個命名方案的最新文件:字符串比較文件名與數字
update_12345.log
update_23456.log
update_34567.log <- get this one
我能明顯分解,並比較數字,但後來我跟蹤我指的是哪些文件。儘可能避免創建不必要的操作。
您可以訂購一個列表,它會給你你都要求
var myList = new List<string>()
{
"update_12345.log", "update_23456.log", "update_34567.log"
};
var lastString = myList.OrderByDescending(x => x).First();
linq爲勝利,謝謝 – visc
你可以做
String folder = Directory.GetFiles(mypath).OrderBy(f => f).Last()
嘆氣你是對的..服務我的權利爲打字 – BugFinder
有一個招的順序。試想一下,你有
update_12345.log
update_23456.log
update_34567.log // <- actual solution
update_5.log // <- note this number
因爲5
小於34567
然後update_34567.log
仍是答案;但是,如果按字典順序排列名稱(因爲默認爲.Net),您將有update_5.log
作爲答案。如果這是你的話,那麼一個快速的解決方案可以
using System.Runtime.InteropServices;
...
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
private static extern int StrCmpLogicalW(string x, string y);
...
String[] updates = new String[] {
"update_12345.log",
"update_23456.log",
"update_34567.log",
"update_5.log"
}
// smart sorting, "-" for backward sorting
Array.Sort(updates, (left, right) => -StrCmpLogicalW(left, right));
String result = updates[0];
因爲結果可能基於文化是不同的,你只需要使用數字進行排序。你可以不用至極文件的 「失去的軌道」 是
public static void Main()
{
string[] files =
new string[] { "update_12345.log", "update_23456.log", "update_34567.log" };
var sorted = files
.Select(f => {var a = f.Split("_.".ToCharArray());
return new { name = f, number = a[1]};})
.OrderByDescending(fnn => Convert.ToInt64(fnn.number));
// Print all
sorted.ToList().ForEach(x => Console.WriteLine(x.name));
// Print Top 1 [1]
Console.WriteLine(sorted.ToList().First().name);
// Print Top 1 [2]
Console.WriteLine(sorted.ToList().Take(1).Single().name);
}
輸出:
update_34567.log
update_23456.log
update_12345.logupdate_34567。日誌
update_34567.log
沒有辦法做到這一點*除了*打破名稱,找到最高的數字。 – Jamiec
也許可以告訴我們你到目前爲止已經嘗試過什麼...... –
我只是在尋找更好的建議......分解它是微不足道的代碼,它是微不足道的。 – visc