2016-03-09 70 views
-1

我有兩個或更多的文件,我想比較。我正在尋找具有最高價值的文件。請告訴我一個簡短而親切的方法來獲取這個命名方案的最新文件:字符串比較文件名與數字

update_12345.log 
update_23456.log 
update_34567.log <- get this one 

我能明顯分解,並比較數字,但後來我跟蹤我指的是哪些文件。儘可能避免創建不必要的操作。

+2

沒有辦法做到這一點*除了*打破名稱,找到最高的數字。 – Jamiec

+1

也許可以告訴我們你到目前爲止已經嘗試過什麼...... –

+0

我只是在尋找更好的建議......分解它是微不足道的代碼,它是微不足道的。 – visc

回答

2

您可以訂購一個列表,它會給你你都要求

var myList = new List<string>() 
{ 
    "update_12345.log", "update_23456.log", "update_34567.log" 
}; 
var lastString = myList.OrderByDescending(x => x).First(); 
+0

linq爲勝利,謝謝 – visc

2

你可以做

String folder = Directory.GetFiles(mypath).OrderBy(f => f).Last() 
+0

嘆氣你是對的..服務我的權利爲打字 – BugFinder

2

有一個的順序。試想一下,你有

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]; 
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.l​​og
update_23456.log
update_12345.log

update_34567。日誌

update_34567.l​​og