首页 > 代码库 > linq排序之 根据文本 A-001-002-003 这种类型进行分割排序 空值放于最后
linq排序之 根据文本 A-001-002-003 这种类型进行分割排序 空值放于最后
调用
1 List<string> data = http://www.mamicode.com/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)) 7 { 8 return -1; 9 }10 if (string.IsNullOrEmpty(second))11 {12 return -1;13 }14 //分割字符串15 string[] firstArray = first.Split(‘-‘);16 string[] secondArray = second.Split(‘-‘);17 List<int> intArray = new List<int>();18 //记录比较结果19 for (int i = 0; i < firstArray.Length; i++)20 {21 bool firstIsNumber = int.TryParse(firstArray[i], out firstNumber);22 bool secondIsNumber = int.TryParse(secondArray[i], out secondNumber);23 if (firstIsNumber && secondIsNumber)24 {25 //数字比较26 intArray.Add(firstNumber.CompareTo(secondNumber));27 }28 else {29 //文本比较30 intArray.Add(firstArray[i].CompareTo(secondArray[i]));31 }32 }33 intArray.Reverse();//从末位开始计算差值34 int val = 0;35 //获取差值占比36 for (int i = 0; i < intArray.Count; i++)37 {38 val += intArray[i] * (i+1) * 10;39 }40 return val;41 }42 }
效果图:
linq排序之 根据文本 A-001-002-003 这种类型进行分割排序 空值放于最后
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。