通过写一个Demo展示C#中多种常用的集合排序方法

不多说,程序很简单,就是将集合中的数据进行排序,但使用到的知识点还是比较多的,大牛勿喷,谨献给初学者!直接上程序吧!

namespace Demo
{
    /// <summary>
    /// Demo:使用不同排序方法对元素进行排序
    /// </summary>
    class Program
    {
        private static void Main(string[] args)
        {

            ArrayList arrayList = Product.GetArrayList();
            List<Product> list = Product.GetList();

            //1、使用继承IComparer接口的函数来进行排序
            arrayList.Sort(new ProductCompare());
            foreach (Product product in arrayList)
            {
                Console.WriteLine(product.ToString());
            }
            Console.WriteLine("---------------------------");

            //2、使用继承IComparer<T>接口的函数来进行排序
            list.Sort(new ProductCompareT());
            foreach (Product product in list)
            {
                Console.WriteLine(product.ToString());
            }
            Console.WriteLine("---------------------------");

            //3、使用委托来进行排序
            list.Sort(delegate(Product x, Product y)
            {
                return x.Price.CompareTo(y.Price);
            });
            foreach (Product product in list)
            {
                Console.WriteLine(product.ToString());
            }

            //4、使用Lambda表达式来进行排序;
            list.Sort((x, y) => x.Price.CompareTo(y.Price));
            foreach (Product product in list)
            {
                Console.WriteLine(product.ToString());
            }

            //5、使用扩展方法来进行排序
            foreach (Product product in list.OrderBy(p=>p.Price))
            {
                Console.WriteLine(product.ToString());
            }
            Console.ReadKey();
        }
    }

    public class Product
    {
        public string Name { get; set; }

        public decimal Price { get; set; }

        public static ArrayList GetArrayList()
        {
            return new ArrayList()
            {
                new Product {Name = "WindowsPhone", Price = 10m},
                new Product {Name = "Apple", Price = 20m},
                new Product {Name = "Android", Price = 5m}
            };
        }

        public static List<Product> GetList()
        {
            return new List<Product>()
            {
                new Product {Name = "WindowsPhone", Price = 10m},
                new Product {Name = "Apple", Price = 20m},
                new Product {Name = "Android", Price = 5m}
            };
        }

        public override string ToString()
        {
            return String.Format("{0}--{1}", Name, Price);
        }
    }

    /// <summary>
    /// 使用IComparer对ArrayList进行排序
    /// 显示实现Compare接口,常用ArrayList类型的集合来调用
    /// </summary>
    public class ProductCompare : IComparer
    {
        public int Compare(object x, object y)
        {
            Product first = x as Product;
            Product second = y as Product;
            if (first != null && second !=null)
            {
                return first.Price.CompareTo(second.Price);
            }
            else
            {
                return -1;
            }
        }
    }

    /// <summary>
    /// 使用IComparer<Product>进行排序
    /// 显式实现Compare接口,常用List<T>类型的集合来调用
    /// </summary>
    public class ProductCompareT : IComparer<Product>
    {
        public int Compare(Product x, Product y)
        {
            Product first = x as Product;
            Product second = y as Product;
            if (first != null && second != null)
            {
                return first.Price.CompareTo(second.Price);
            }
            else
            {
                return -1;
            }
        }
    }
}
时间: 2024-08-09 10:44:51

通过写一个Demo展示C#中多种常用的集合排序方法的相关文章

Java基础-接口.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,要求 方法 实现输出大写英文字母表的功能,printLowerca

#34.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法void printCapitalLetter():在接口InterfaceB中有个方法void printLowercaseLetter():然 后写一个类Print实现接口InterfaceA和InterfaceB,要求      方法 实现输出大写英文字母表的功能,printLowercaseLetter()方法实现输出小写英文 字母表的功能.再写一个主类E,在主类E的main方法中创建P

写一个函数实现数组中的元素随机乱序排序

//原生JS写一个函数实现一个shuffle方法,将数组中的元素随机乱序排序 var shuffle = function(arr){ var len,t,rand; for(var i =0;len = arr.length,i<len;i++){ rand = parseInt(Math.random()*len);//parseInt(Math.random()*(len-1-0)+1);或者rand = Math.floor(Math.random()*(len-1-0)+1);即Mat

C#中ArrayList和泛型集合List方法概述概述

首先,ArrayList集合和List都是非静态类,使用时都必须先实列化. ArrayList类似一个数组,但比数组优越的是它的长度大小可变,并且可以存放不同类型的变量,包括值类型和引用类型. 常用方法如下: 1.Add():方法用于添加一个元素到当前列表的末尾 2.AddRange():方法用于添加一批元素(数组或者集合)到列表的末尾 3.Remove():方法用于删除一个元素,通过元素本身的引用来删除,填什么删什么 4.RemoveAt():方法用于删除一个元素,通过索引值来删除 5.Rem

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 2)可变数组 - (void)sortUsingSelector:(SEL)comparator; - (void)sortUsingComparator:(NSComparator)cmptr; 3).字典排序 - (NS

db2中的常用命令及使用方法

一.高(重要度) 1.启动一个db 2实例使用:  net start instanceName 2.停止一个db 2实例使用:  net stop instanceName 3.启动配置助手:  db2=>!db2ca 4.手工配置连接:  db2=>catalog node/db 5.删除视图:  db2=>drop view view_name 6.创建表:  db2=>create table tablename 7.列出活动的数据库和连接数:  db2=>list

一个Demo展示Storyboard的强大

本文转载至http://www.cocoachina.com/ios/20150330/11440.html 今天我通过完成一个长按cell删除的Demo,向你们展示熟练运用storyboard和Autolayout能给你的开发速度和效率带来多大的提升. 删除动画 废话不多说,新建一个Single View Application. 到storyboard选中我们唯一一个的viewcontroller,找到xcode的菜单栏,Edit->Embed In->NavigationControll

用react写一个demo,增删列表

今天学了一点react,挺好玩的哈哈,分享一下demo 1.环境搭建 (1)首先进入node.js官网,下载nods.js后安装,安装成功后会自带安装npm,接下来验证是否安装成功,在cmd中输入node -v和npm -v后若输出版本号及证明安装成功,如下: (2)下载submit._text,进入submit官网,下载软件后安装即可 2.react项目创建 (1)进入cmd,输入命令 npx create-react-app app cd app npm start 即可创建一个名为app的

Swift学习的第一个demo,讲解了一些常用的知识点

/** 1. OC [UIView alloc] initWithXXX:] Swift UIView(XXX:) 类名() == alloc / init 等价 2. 类方法 OC [UIColor redColor] Swift UIColor.red 3. 访问当前对象的属性,可以不使用'self.' 建议:都不用,在编译器提示的时候,在添加,会对'语境'有更好地体会 原因:闭包(类似于OC中的block),需要使用'self.' 4. 没有';' ';' 的目的是分割语句的,在Swift

系统中多种隐藏超级用户添加方法第1/2页

我们可以从防范的角度出发,如果查找隐藏用户 一.如何在图形界面建立隐藏的超级用户 图形界面下适用本地或开3389终端服务的肉鸡上.上面我提到的那位作者说的方法很好,但是较为复杂,还要用到psu.exe(让程序以系统用户身份运行的程序),如果在肉鸡上的话还要上传psu.exe.我说的这个方法将不用到psu.exe这个程序.因为Windows2000有两个注册表编辑器:regedit.exe和regedt32.exe.XP中regedit.exe和regedt32.exe实为一个程序,修改键值的权限