调用

   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 这种类型进行分割排序 空值放于最后的更多相关文章

  1. 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)

    写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的随意序列,又一次排列成一个按keyword有序的序列.因此排序掌握各种排序算法很重要. 对以下介绍的各个排序,我们假定全部排 ...

  2. 基本的排序算法C++实现(插入排序,选择排序,冒泡排序,归并排序,快速排序,最大堆排序,希尔排序)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8529525.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  3. bootstrap-table不分页时对数值类型数据的排序

    html中的代码 <table id="table"></table> sortData.json的数据如下 [ {"name":&qu ...

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

    简说排序 排序是极其常见的使用场景,因为在生活中就有很多这样的实例.国家GDP排名.奥运奖牌排名.明星粉丝排名等,各大排行榜,给人的既是动力,也是压力. 而讲到排序,就会有各种排序算法和相关实现,本文 ...

  5. LINQ中的OrderBy实现按照两个字段升序、降序排序操作

    在公司或许有这种需求,先根据第一个某个字段按照升序排序,然后如果相同,在按照第二个某个字降序排序,我们该怎么去实现呢? 现在来教教大家分别使用Labmda和LINQ进行这种操作. 1.先按照第一个字段 ...

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

    需求: 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件 分析: A:创建学生类 B:创建集合对象 TreeSet<Student> C:键盘录入学 ...

  7. 东方国信 - 软件开发人员面试问卷(ver1.001.002)

    1.    通用编程知识问卷(所有编程人员必做)... 1 1.1      SQL问卷... 1 1.2      翻译... 2 2.    Java问卷(Java程序员应答,其他跳过)... 2 ...

  8. linq 升序排序 空值放后面并根据另一个字段进行多重排序

    List<PickingInfo> res = GetDatas(); var _d = (from e in res select new { aa = e.pickingLibrary ...

  9. .zip.001 -- .zip.003解压缩

    一.源文件移到固定短路径 二.cmd执行合并 copy /B 201702.zip.001 + 201702.zip.002 + 201702.zip.003 1.zip 三.WinRAR解压缩

随机推荐

  1. 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别

    高效开发之SASS篇   作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...

  2. openGl学习之基本图元

    从本篇開始,会给出一些代码实例,所以要配置好编译环境. 环境配置: vs2012下配置链接http://www.cnblogs.com/dreampursuer/archive/2014/05/27/ ...

  3. 【转】在Oracle中查看各个表、表空间占用空间的大小

    查看当前用户每个表占用空间的大小:    select segment_name,sum(bytes)/1024/1024 from user_extents group by segment_nam ...

  4. bzoj 1036 树的统计Count

    题目大意: 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u ...

  5. 懒人学习automake, Makefile.am,configure.ac

    已经存在Makefile.am,如何生成Makefile? 步骤: [root@localhost hello]# autoscan .///在当前文件夹中搜索 [root@localhost hel ...

  6. 使用adb进行关机(转载)

    转自:http://hi.baidu.com/fangqianshu/item/dc52b92d31b2dd1542634a3d 其实进入adb shell,然后执行reboot -p或者直接在命令行 ...

  7. C# Pen绘制虚线(System.Drawing.Pen与System.Windows.Media.Pen)

    一.绘制虚线的方法 GDI绘制,使用的是System.Drawing.Pen Pen pen = new Pen(Color.Red, 1);            pen.DashStyle = S ...

  8. bzoj1121[POI2008]激光发射器SZK(结论)

    1121: [POI2008]激光发射器SZK Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 916  Solved: 759[Submit][Sta ...

  9. CSS元素超出部分滚动,并隐藏滚动条

    方法一, 利用 css 3 的新特性  -webkit-scrollbar, 但是这种方式不兼容 火狐 和 IE <!DOCTYPE html> <html> <head ...

  10. Codeforces 455D 分块+链表

    题意: 给定一个长度为 N 的序列两种操作1 l r 将[l,r]的数向右循环移位 2 l r 询问[l,r]内有多少个数等于 k其中 N,Q≤105,ai≤N 强制在线 思路: 1. 每块用一个链表 ...