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))
 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     }

效果图:

时间: 2024-10-04 00:03:01

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

&#8203;老男孩教育每日一题-第79天-命令风暴:打印出001 002 003 这样的格式的数字

题目: 打印出001 002 003 这样的格式的数字 参考答案 方法1:{}生成序列 [[email protected] ~]# echo 00{1..3} 001  002  003 方法2:seq法 [[email protected] ~]# seq -w 100 001 002 003 004 005 006 007 ---- [[email protected] ~]# seq -w 100 |sed -n '1,3p' 001 002 003 此法效率不高.尽量让第一次的结果越接

列表类型删除循环排序

列表删除 pop()删除列表最后一个 remove()删除列表某元素..如果有重复的值删除指定第一个元素,只能以个一个删除 del全局性的删除 del可以删除变量..可以删除列表内某元素...可以批量删除 列表循环使用for for循环使用语法是  for i in 某列表 rang(10)生成一个列表是0到10的 列表排序 列表是有序的列表是按照索引排列. 排序使用sort() 如列表内.有数值和字符的不能排序 sort()排序按照ASCII顺序排列 reverse()倒序 列表加起来用+或者

1050: 分割排序

题目描述 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由若干个'0'组成的,这时这个整数就是0).你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出. 输入 输入包含多组测试数据.每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000.  输入数据保证:分割得到的非负整数不会大于100000000,输入数据不可能全由'5'组成. 输出 对于每个测试

【Java必修课】一图说尽排序,一文细说Sorting(Array、List、Stream的排序)

# 简说排序 排序是极其常见的使用场景,因为在生活中就有很多这样的实例.国家GDP排名.奥运奖牌排名.明星粉丝排名等,各大排行榜,给人的既是动力,也是压力. 而讲到排序,就会有各种排序算法和相关实现,本文不讲任何排序算法,而只专注于讲使用.通过实例给大家展示,我们可以了解怎样使用既有的工具进行排序.Linux之父说: > Talk is cheap. show me the code! 本文JDK版本为Java 8,但并不代表所介绍到的所有方法只能在JDK1.8上跑,部分方法在之前的版本就已经给

在 LINQ to Entities 查询中无法构造实体或复杂类型

在编写EF+Linq的过程中,可能会遇到"在 LINQ to Entities 查询中无法构造实体或复杂类型"的问题.解决方法:从原有类型中继承一个子类,然后创建子类实例下面是例子: private static void Main(string[] args) { Boolean s = false; using(Northwind dbo = new Northwind()) { IQueryable<Customers> query; if(s) { // 错误的写法

IO流的练习4 —— 键盘录入学生成绩信息,进行排序后存入文本中

需求: 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件 分析: A:创建学生类 B:创建集合对象 TreeSet<Student> C:键盘录入学生信息存储到集合 D:遍历集合,把数据写到文本文件 首先创建个学生类 1 package zl_Test; 2 /** 3 * 这是个记录学生成绩类 4 * @author LZL 5 * 6 */ 7 public class Student { 8 private String name; 9 priva

查看、排序和修改文本

cat myfile.txt, --将整个文件显示到屏幕上 cat myfile.txt > copy.txt, --定向 cat myfile.txt >>myanotherfile.txt, --追加 head 50 myfile.txt, --显示文件开头50行 tail 20 myfile.txt, --显示文件末尾20行 cat myfile.txt | less, --分页查看文件内容 less myfile.txt, --分页查看文本文件

C# 自定义类型数组的排序

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 数组排序 8 { 9 /// <summary> 10 /// IComparable : 接口 11 /// </summary> 12 public class Student : IComparabl

SqlSever基础 convert 将类型为字符的一列转成Int类型后进行排序

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 base code 1 use master 2 drop database helloworld 3 4 --创建一个数据库 5 create database helloworld 6 7 --用helloworld1这个数据库 8 use helloworld 9 10 --创建一个表格