.NET中如何实现一个List按bool类型排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET中如何实现一个List按bool类型排序相关的知识,希望对你有一定的参考价值。

源码如下:
List<UserInfo> list = new List<UserInfo>();
for (int i = 0; i < db.num_rows; i++)

UserInfo c = new UserInfo();
c.Stone = (db.rows[i]["stone"] == System.DBNull.Value) ? 0 : Convert.ToInt64(db.rows[i]["stone"].ToString());
c.Productnum = (db.rows[i]["productnum"] == System.DBNull.Value) ? 0 : Convert.ToInt64(db.rows[i]["productnum"].ToString());
c.Stealnum = (db.rows[i]["stealnum"] == System.DBNull.Value) ? 0 : Convert.ToInt64(db.rows[i]["stealnum"].ToString());
c.Addtime = (db.rows[i]["addtime"] == System.DBNull.Value) ? DateTime.MinValue : Convert.ToDateTime(db.rows[i]["addtime"].ToString());
c.Logintime = (db.rows[i]["logintime"] == System.DBNull.Value) ? DateTime.MinValue : Convert.ToDateTime(db.rows[i]["logintime"].ToString());
c.Hot = (db.rows[i]["hot"] == System.DBNull.Value) ? 0 : Convert.ToInt32(db.rows[i]["hot"].ToString());
c.Operatnum = (db.rows[i]["operatnum"] == System.DBNull.Value) ? 0 : Convert.ToInt32(db.rows[i]["operatnum"].ToString());
c.Userid = (db.rows[i]["userid"] == System.DBNull.Value) ? 0 : Convert.ToInt32(db.rows[i]["userid"].ToString());
c.Landnum = (db.rows[i]["landnum"] == System.DBNull.Value) ? 0 : Convert.ToInt32(db.rows[i]["landnum"].ToString());
c.Sheepnum = (db.rows[i]["sheepnum"] == System.DBNull.Value) ? 0 : Convert.ToInt32(db.rows[i]["sheepnum"].ToString());
c.Nick = (db.rows[i]["nick"] == System.DBNull.Value) ? "" : db.rows[i]["nick"].ToString();
c.Mature =FriendAdo.p_friend_ifmature(c.Userid, db);
list.Add(c);


我现在想按mature这个字段排序list mature 为bool 类型
mature这个字段在数据库的user表里是没有的。。我是先分页查询出用户 然后在执行另外的一个存储过程来给mature赋值的。
如果想在数据库里排序好

如何写这个分页的存储过程?

参考技术A 可以先在数据库中排序,根据数据库获取的数据再list.Add(c),这样最好啦。

或者在Add后再排序,写个循环遍历list,如果mature==true,记录该temp=list[i],从list中删除它,然后把temp重新insert到list头或尾;如果mature==false也一样,最后insert到list头或尾.

如何对List集合中的对象进行按某个属性排序

我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序

当list集合中的元素类型是我们自定义类型时,有两种对list中的元素进行排序的方法:

方法一

  让list集合中的元素类型,也就是我们自定义的类实现Comparable<T>接口,并在类中编写public int compareTo(T o)方法。如下所示:

 1 public class Test 
 2 
 3     public static void main(String[] args) 
 4     
 5         ArrayList<Entity> list=new ArrayList<Entity>();
 6         list.add(new Entity("李四",24));
 7         list.add(new Entity("张三",13));
 8         list.add(new Entity("王五",25));
 9         System.out.println("排序前:"+list);
10         Collections.sort(list);
11         System.out.println("排序后:"+list);
12     
13 
14 class Entity implements Comparable<Entity>
15 
16     String name;
17     int age;
18     public Entity(String name, int age) 
19         super();
20         this.name = name;
21         this.age = age;
22     
23     public String getName() 
24         return name;
25     
26     public void setName(String name) 
27         this.name = name;
28     
29     public int getAge() 
30         return age;
31     
32     public void setAge(int age) 
33         this.age = age;
34     
35     @Override
36     public String toString() 
37         return "Entity [name=" + name + ", age=" + age + "]";
38     
39     @Override
40     public int compareTo(Entity o) 
41     
42         if(this.getAge()>o.getAge())
43         
44             return 1;
45         
46         else if(this.getAge()<o.getAge())
47         
48             return -1;
49         
50         else
51         
52             return 0;
53         
54     
55 

  我们想对Entity这个类型按照age属性值从小到大排序,则方法一是让Entity这个类实现Comparable<Entity>接口,并编写public int compareTo(Entity o) 方法。这样使用Collections.sort(list);就可以对list中的对象进行按照age大小排序。

输出结果:

排序前:[Entity [name=李四, age=24], Entity [name=张三, age=13], Entity [name=王五, age=25]]
排序后:[Entity [name=张三, age=13], Entity [name=李四, age=24], Entity [name=王五, age=25]]

方法二

  方法二就是在排序的时候,给sort()方法传入一个比较器。具体来说,就是传入一个实现比较器接口的匿名内部类,目的是告诉sort()方法,按照比较器来对list中的对象进行排序。如下所示:

 1 public class Test 
 2 
 3     public static void main(String[] args) 
 4     
 5         ArrayList<Entity> list=new ArrayList<Entity>();
 6         list.add(new Entity("李四",24));
 7         list.add(new Entity("张三",13));
 8         list.add(new Entity("王五",25));
 9         System.out.println("排序前:"+list);
10         Collections.sort(list,new Comparator<Entity>() 
11         @Override
12         public int compare(Entity o1, Entity o2) 
13         
14             if(o1.getAge()>o2.getAge())
15             
16                 return 1;
17             
18             else if(o1.getAge()<o2.getAge())
19             
20                 return -1;
21             
22             else
23             
24                 return 0;
25             
26         
27     );
28         System.out.println("排序后:"+list);
29     
30 
31 class Entity
32 
33     String name;
34     int age;
35     public Entity(String name, int age) 
36         super();
37         this.name = name;
38         this.age = age;
39     
40     public String getName() 
41         return name;
42     
43     public void setName(String name) 
44         this.name = name;
45     
46     public int getAge() 
47         return age;
48     
49     public void setAge(int age) 
50         this.age = age;
51     
52     @Override
53     public String toString() 
54         return "Entity [name=" + name + ", age=" + age + "]";
55     
56 

  当给sort()方法传入比较器的时候,sort()方法就会根据比较器来对list中的对象进行排序。

输出结果:

排序前:[Entity [name=李四, age=24], Entity [name=张三, age=13], Entity [name=王五, age=25]]
排序后:[Entity [name=张三, age=13], Entity [name=李四, age=24], Entity [name=王五, age=25]]

  而sort()方法为什么能对String类型的数据进行排序呢?

  答案是,String这个类实现了Comparable<String>接口。所以,可以直接用Collections.sort(list);来对String类型的数据进行排序。

 

以上是关于.NET中如何实现一个List按bool类型排序的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你如何用java8新特性将List中按指定属性排序,过滤重复数据

如何按 .NET 2.0 中的特定属性对列表进行排序? [复制]

Python: Pandas的DataFrame如何按指定list排序

如何用java对excel进行自定义排序?

请问django如何将字符型字段按数值型排序,如‘12,123,1111,133’,排序后结果为12,123,133,1111,在线等

怎样按日期排序LIST集合