前段时间有个任务,就是把参数要按特定顺序排序,就是要是在一张大的参数表中,只选取,2,5,12,9,13,10 这几个参数,并按上述顺序进行排序。

假设这个参数在一个类中。例如: 上述参数序列就存在ParamIndex。

public class ParamDemo
{ public int ParamIndex { get; set; }
public string ParamName{ get; set; }
public string ParamType { get; set; } }

假设有个List

 List<ParamDemo> Params = new List<ParamDemo>();

设置这个排序,需要的是 List<T>.Sort 方法 (IComparer<T>),http://msdn.microsoft.com/zh-cn/library/vstudio/234b841s.aspx

msdn上有一些描述,但是在我手头上的一些c#的书上面都是没有相关的叙述的,还是幸好有同事可以询问,解决了这个问题。

我姑且把这个排序分为三个部分。

1、以 ParamIndex这个值为HashTable的key,构建一个哈希表,来实现上述的顺序,比如说

hash[2] =100

  hash[5] =99

hash[12] =98

hash[9] =97

hash[13] =96

hash[10] =95

表述的不是很清楚,但是更像c里面的指针,一个变量,自身有值,且还能指一个值(貌似更加不清楚了)。其实可以不用HashTable,但是为了预防将来的参数会增多,故选择了HashTable。

具体表述如下:

 int[] numbers = new int[]{,,,,,};
Hashtable hash = new Hashtable();
for (int i = ; i < numbers.Length; i++)
{
hash[numbers[i]] = ( - i); }

随便给我一个参数顺序,都可以加入到HashTable中然后就按这个顺序排序。

2、构建 能够使用List().sort() (IComparer<T>).

这个有不少关键点 ,比较容易的是 这个类必须有IComparer这个接口(我现在不是很清楚什么是接口);上面那一段 数组 哈希表的那一块,必须放在Compare函数里;

这个类必须有Compare函数;这个函数必须要返回 -1 1 0要不就会出错; -1表示小于,1表示大于,0表示等于;其实可以更简单更加简化(后面在补充 2013-07-08),但是觉得容易逻辑上疑惑,所以我更喜欢分开写。

public class ParamComparer : IComparer<ParamDemo>
{ public int Compare(ParamDemo para1, ParamDemo para2)
{
int[] numbers = new int[] { , , , , , };
Hashtable hash = new Hashtable();
for (int i = ; i < numbers.Length; i++)
{
hash[numbers[i]] = ( - i); }
if ((int)hash[para1.ParamIndex] < (int)hash[para2.ParamIndex])
{ return -; }
if ((int)hash[para1.ParamIndex] > (int)hash[para2.ParamIndex])
{ return ; } return ;
} }

能不能把数组声明和 hashtable放在外面但是 这个函数是能用到的。

3、进行排序

  List<ParamDemo> Params = new List<ParamDemo>();
ParamComparer pce = new ParamComparer();
Params.Sort(pce);

好了 先暂时告一段落,没有全部贴出代码的问题就是,可能全部的代码就会出问题。

先这样吧

list<T>中的按特定顺序排序的更多相关文章

  1. SQL Server中使用自定义指定顺序排序

    比如需要对SQL表中的字段NAME进行如下的排序:张三(Z)李四(L)王五(W)赵六(Z) 如果想按 “ 张三.李四.王五.赵六”的顺序排序,则可以使用以下语句: order by charindex ...

  2. 使用mybatis查询数据,按特定顺序排序

    有如下表table_people id          name 1          dwyane 2          james 3          paul 4          bosh ...

  3. C#中List按特定字段排序

    有一个类,如Student,有学号.数学成绩.语文成绩, 存在List列表中,要将List按数学成绩排序,怎么办呢? List<Student> scores=GetScores(); s ...

  4. java中的TreeMap如何顺序按照插入顺序排序

    java中的TreeMap如何顺序按照插入顺序排序 你可以使用LinkedHashMap  这个是可以记住插入顺序的. 用LinkedHashMap吧.它内部有一个链表,保持插入的顺序.迭代的时候,也 ...

  5. 对List中每个对象元素按时间顺序排序

    需求: 需要对List中的每个User按照birthday顺序排序,时间由小到大排列. 代码实现: import java.text.SimpleDateFormat; import java.uti ...

  6. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  7. Java基础面试操作题:读取该文件内容,并按照自然顺序排序后输出到 另一个文件中

    package com.swift; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...

  8. 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

    // 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...

  9. C语言:根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,-主函数中放入一个带头节点的链表结构中,h指向链表的头节点。fun函数找出学生的最高分-使用插入排序法对字符串中的字符进行升序排序。-从文件中找到指定学号的学生数据,读入次学生数据,

    //根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,输出字母的大小与形参c一致,数量由形参d指定.例如:输入c为Y,d为4,则输出ZABC. #include <stdio.h> ...

随机推荐

  1. mongodb 的一些基本命令以及 导入、导出,待更新

    基本命令参考: https://blog.csdn.net/cckevincyh/article/details/78702674 导入导出参考:https://blog.csdn.net/djy37 ...

  2. [UE4]场景截图

    要点: 一.鼠标在编辑器关卡中点一下,然后按F9键截图,右下角会出现截图后的文件链接,点击后会自动打开截图文件所在的文件夹.截图的大小正好的关卡视图的大小. 编辑器:F9键截图,只截图关卡视图界面 运 ...

  3. Mybatis 系列8-结合源码解析select、resultMap的用法

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  4. JavaScript基础知识点学习记录

    一.简介: JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如相应用户的各种操作. J ...

  5. WPF简单实用方法(持续更新)

    1:点击退出提示框 MessageBoxResult result = MessageBox.Show("你真的要退出吗?", "", MessageBoxBu ...

  6. LeetCode 7 Reverse Integer & int

    Reverse Integer 想用余10直接算,没想到 -123%10 是 7, 原因 -123-(-123//10*10) r=a-n*[a/n] 以上,r是余数,a是被除数,n是除数. 唯一不同 ...

  7. Robot Operating System (ROS)学习笔记---创建简单的机器人模型smartcar

    搭建环境:XMWare  Ubuntu14.04  ROS(indigo) 转载自古月居  转载连接:http://www.guyuehome.com/243 一.创建硬件描述包 已创建catkin_ ...

  8. 事件冒泡及事件委托的理解(JQuery Dom操作)

    jQuery事件冒泡: click mouseenter 等事件没有绑定 也会触发,只是触发后没有任何结果 子元素触发事件后,会把触发事件传递给父元素,那么父元素也会被触发. 不管有没有绑定事件,都会 ...

  9. iOS oc 检测手机移动网络和wifi是否开启

    利用Reachability的的一个方法currentReachabilityStatus 获取枚举类型值判断是否为2即可,不是2就不是WiFi. enum {        // DDG Netwo ...

  10. 《汇编语言 基于x86处理器》第九章字符串与数组部分的代码

    ▶ 书中第九章的程序,主要讲了字符串相关的输入.输出,以及冒泡排序.二分搜索 ● 代码,Irvine32 中的字符串库函数代码范例 INCLUDE Irvine32.inc .data str1 BY ...