簡體   English   中英

LINQ首先對特殊字符進行排序?

[英]LINQ sorting special characters first?

看起來在使用LINQ排序時沒有考慮特殊字符,而且我沒想到會這樣。 無論如何,我需要對特殊字符進行排序,以便它們首先出現在列表中。 有任何想法嗎? 我知道我可以做類似的事情: 使用LINQ進行任意排序 ,但是如何允許擴展擴展傳遞特殊字符:

示例列表:

  • “測試”
  • 測試

丹尼爾

.Net 3.5的鮮為人知的功能之一是,您可以用lambda代替IComparer。 這對於需要一次性排序的情況非常方便。 如果這不是一次性的,那么最好使用自定義IComparer類。 這是這種蠻力風格的方式:

List<string> list = new List<string>();
list.Sort((x, y) =>
{
    if(Char.IsLetterOrDigit(x[0])){
        if(!Char.IsLetterOrDigit(y[0])){
            // x is a letter/digit and y is not, override regular CompareTo
            return -1;
        }
    }
    else if (Char.IsLetterOrDigit(y[0]))
    {
        // y is a letter/digit and x is not, override regular CompareTo
        return 1;
    }
    return x.CompareTo(y);
});

System.Linq.Enumerable提供了OrderBy和ThenBy的重載,這些重載接受實現IComparer<T>的比較器。 您只需要編寫自己的比較器(一個方法)即可定義如何對字符串進行排序。

qry = qry.OrderBy(q => q.VALUE.Replace("-","aaa"));

這對我有用,很簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM