linq排序之 根据文本 A-001-002-003 这种类型进行分割排序 空值放于最后
调用
List<string> data = new List<string>() {
"D-001-001-001","A-001-004-001","A-001-002-001",
"A-002-001-001", "F-004-001-001", "A-003-001-001",
"A-004-001-004","A-041-0401-031","" };
var gf = (from e in data select e).OrderBy(x => x, new AlphaNumericComparer()).ToList();
比较器
public class AlphaNumericComparer : IComparer<string>
{
public int Compare(string first, string second)
{
int firstNumber, secondNumber;//定义数值类型返回值
if (string.IsNullOrEmpty(first)&& string.IsNullOrEmpty(second))
{
return ;
}
if (string.IsNullOrEmpty(first) && !string.IsNullOrEmpty(second))
{
return ;
}
if (!string.IsNullOrEmpty(first) && string.IsNullOrEmpty(second))
{
return -;
}
//分割字符串
string[] firstArray = first.Split('-');
string[] secondArray = second.Split('-');
List<int> intArray = new List<int>();
//记录比较结果
for (int i = ; i < firstArray.Length; i++)
{
bool firstIsNumber = int.TryParse(firstArray[i], out firstNumber);
bool secondIsNumber = int.TryParse(secondArray[i], out secondNumber);
if (firstIsNumber && secondIsNumber)
{
//数字比较
intArray.Add(firstNumber.CompareTo(secondNumber));
}
else {
//文本比较
intArray.Add(firstArray[i].CompareTo(secondArray[i]));
}
}
intArray.Reverse();//从末位开始计算差值
int val = ;
//获取差值占比
for (int i = ; i < intArray.Count; i++)
{
val += intArray[i] * (i+) * ;
}
return val;
}
}
效果图:

linq排序之 根据文本 A-001-002-003 这种类型进行分割排序 空值放于最后的更多相关文章
- 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)
写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...
- 基本的排序算法C++实现(插入排序,选择排序,冒泡排序,归并排序,快速排序,最大堆排序,希尔排序)
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8529525.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- bootstrap-table不分页时对数值类型数据的排序
html中的代码 <table id="table"></table> sortData.json的数据如下 [ {"name":&qu ...
- 【Java必修课】一图说尽排序,一文细说Sorting(Array、List、Stream的排序)
简说排序 排序是极其常见的使用场景,因为在生活中就有很多这样的实例.国家GDP排名.奥运奖牌排名.明星粉丝排名等,各大排行榜,给人的既是动力,也是压力. 而讲到排序,就会有各种排序算法和相关实现,本文 ...
- LINQ中的OrderBy实现按照两个字段升序、降序排序操作
在公司或许有这种需求,先根据第一个某个字段按照升序排序,然后如果相同,在按照第二个某个字降序排序,我们该怎么去实现呢? 现在来教教大家分别使用Labmda和LINQ进行这种操作. 1.先按照第一个字段 ...
- IO流的练习4 —— 键盘录入学生成绩信息,进行排序后存入文本中
需求: 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件 分析: A:创建学生类 B:创建集合对象 TreeSet<Student> C:键盘录入学 ...
- 东方国信 - 软件开发人员面试问卷(ver1.001.002)
1. 通用编程知识问卷(所有编程人员必做)... 1 1.1 SQL问卷... 1 1.2 翻译... 2 2. Java问卷(Java程序员应答,其他跳过)... 2 ...
- linq 升序排序 空值放后面并根据另一个字段进行多重排序
List<PickingInfo> res = GetDatas(); var _d = (from e in res select new { aa = e.pickingLibrary ...
- .zip.001 -- .zip.003解压缩
一.源文件移到固定短路径 二.cmd执行合并 copy /B 201702.zip.001 + 201702.zip.002 + 201702.zip.003 1.zip 三.WinRAR解压缩
随机推荐
- 一个unity3d lightmap问题
上周美术同学在使用unity3d制作lightmap的过程中,发现部分被lightmap影响的模型在移动端上效果与pc端不一致.当时我大概看了下,分析后,得到一个结论是“在移动端上lightmap的h ...
- zedboard 流水灯
#include"xparameters.h"/* Peripheral parameters 外围的參数 */ #include"xgpio.h"/* GPI ...
- tab不显示为空格
- codeforces 939E Maximize! 双指针(two pointers)
E. Maximize! time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...
- bzoj1008 [HNOI2008]越狱——快速幂
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1008 (这样一道水题还因为忘记写 %lld WA了那么多遍) 发生越狱的状态数,就是全部状态 ...
- android api level对应表(copy)
Platform Version API Level VERSION_CODE Notes Android 4.4 19 KITKAT Platform Highlights Android 4.3 ...
- Linux运维人员-服务器组成硬件基础
第1章 1.1关于运维人员 1.1.1 运维的职责 数据不能丢 网站7*24小时运行 保证用户体验(用户体验要好) 1.1.2 运维原则 简单.易用.高效 === 简单.粗暴 1.2 服务器 1.2 ...
- ACM_Jack拆炸弹(深搜)
Jack拆炸弹 Time Limit: 2000/1000ms (Java/Others) Problem Description: 在一个由n*n个格子组成的监狱里被恐怖份子安置了一个定时炸弹.其中 ...
- 【Leetcode 220】 Contains Duplicate III
问题描述:判断数组中是否存在<ai aj> abs(ai - aj)<=t && abs(i - j) <=k: 问题分析:需要一个数据结构来维护满足条件k. ...
- [转]Linux命令之iconv
转自:http://lorna8023.blog.51cto.com/777608/420313 用途说明 iconv命令是用来转换文件的编码方式的(Convert encoding of given ...