• linq排序之 根据文本 A-001-002-003 这种类型进行分割排序 空值放于最后


    调用

    1   List<string> data = new List<string>() {
    2                 "D-001-001-001","A-001-004-001","A-001-002-001",
    3                 "A-002-001-001", "F-004-001-001", "A-003-001-001",
    4                 "A-004-001-004","A-041-0401-031","" };
    5             var gf = (from e in data select e).OrderBy(x => x, new AlphaNumericComparer()).ToList();

    比较器

     1   public class AlphaNumericComparer : IComparer<string>
     2     {
     3         public int Compare(string first, string second)
     4         {
     5              int firstNumber, secondNumber;//定义数值类型返回值
     6             if (string.IsNullOrEmpty(first)&& string.IsNullOrEmpty(second))
     7             {
     8                 return 0;
     9             }
    10             if (string.IsNullOrEmpty(first) && !string.IsNullOrEmpty(second))
    11             {
    12                 return 1;
    13             }
    14             if (!string.IsNullOrEmpty(first) && string.IsNullOrEmpty(second))
    15             {
    16                 return -1;
    17             }
    18             //分割字符串
    19             string[] firstArray = first.Split('-');
    20             string[] secondArray = second.Split('-');
    21             List<int> intArray = new List<int>();
    22             //记录比较结果
    23             for (int i = 0; i < firstArray.Length; i++)
    24             {
    25                 bool firstIsNumber = int.TryParse(firstArray[i], out firstNumber);
    26                 bool secondIsNumber = int.TryParse(secondArray[i], out secondNumber);
    27                 if (firstIsNumber && secondIsNumber)
    28                 {
    29                     //数字比较
    30                     intArray.Add(firstNumber.CompareTo(secondNumber));
    31                 }
    32                 else {
    33                     //文本比较
    34                     intArray.Add(firstArray[i].CompareTo(secondArray[i]));
    35                 }
    36             }
    37             intArray.Reverse();//从末位开始计算差值
    38             int val = 0;
    39             //获取差值占比
    40             for (int i = 0; i < intArray.Count; i++)
    41             {
    42                 val += intArray[i] * (i+1) * 10;
    43             }
    44             return val;
    45         }
    46     }

    效果图:

  • 相关阅读:
    CMake基本语法
    Immutable使用与react+redux
    mysql 安装之docker
    elasticsearch 安装之docker 单机
    局域网共享时提示:你没有权限访问,请与网络管理员联系
    【python、Neo4j】 python3.6环境安装neo4j客户端
    【python】 Anaconda jupyter 服务正常,内核启动失败, ipython启动失败
    Neo4j 手动安装apoc插件
    Ubuntu16 安装配置Neo4j
    node工具之nodemon
  • 原文地址:https://www.cnblogs.com/nontracey/p/6681372.html
Copyright © 2020-2023  润新知