精华内容
下载资源
问答
  • 它应该这样的:public static bool IsArraySorted(int[] numbers){bool? ascending = null;for (int i = 1; i < numbers.Length; i++){if (numbers[i - 1] != numbers[i]){bool ascending2 = numbers[i - 1] &...

    它应该是这样的:

    public static bool IsArraySorted(int[] numbers)

    {

    bool? ascending = null;

    for (int i = 1; i < numbers.Length; i++)

    {

    if (numbers[i - 1] != numbers[i])

    {

    bool ascending2 = numbers[i - 1] < numbers[i];

    if (ascending == null)

    {

    ascending = ascending2;

    }

    else if (ascending.Value != ascending2)

    {

    return false;

    }

    }

    }

    return true;

    }

    注意使用升序变量来保存数组的“方向”.它是在第一次找到两个不同的元素时初始化的.

    请注意,如果需要,您甚至可以返回数组的“方向”:

    public static bool IsArraySorted(int[] numbers, out bool isAscending)

    {

    isAscending = true;

    bool? ascending = null;

    在if内(升序== null)

    if (ascending == null)

    {

    ascending = ascending2;

    isAscending = ascending2;

    }

    这是基于IEnumerable< TSource>的通用版本:

    public static bool IsSorted(IEnumerable source, out bool isAscending, Comparer comparer = null)

    {

    isAscending = true;

    if (comparer == null)

    {

    comparer = Comparer.Default;

    }

    bool first = true;

    TSource previous = default(TSource);

    bool? ascending = null;

    foreach (TSource current in source)

    {

    if (!first)

    {

    int cmp = comparer.Compare(previous, current);

    if (cmp != 0)

    {

    bool ascending2 = cmp < 0;

    if (ascending == null)

    {

    ascending = ascending2;

    isAscending = ascending2;

    }

    else if (ascending.Value != ascending2)

    {

    return false;

    }

    }

    }

    first = false;

    previous = current;

    }

    return true;

    }

    注意使用bool first / TSource之前处理i – 1(以及for循环能够“跳过”第一个元素的事实)

    展开全文
  • 默认的排序使用升序排列,并且只能针对基本的数值类型排序,因为数值类型默认实现了对两个值比较的接口。但如果引用类型需要排序,则此引用类型需要实现IComparable接口,实现接口中的CompareTo()方法用于比较两...

    在.net framework中,数组和集合都实现了用于排序的方法sort(),数组通过调用Array.Sort(数组名)排序,集合通过调用 集合对象.Sort()方法排序。

    默认的排序是使用升序排列,并且只能针对基本的数值类型排序,因为数值类型默认实现了对两个值比较的接口。但如果是引用类型需要排序,则此引用类型

    需要实现IComparable接口,实现接口中的CompareTo()方法用于比较两个对象。

    与比较和排序有关的接口有四个:非范型版本IComparable和IComparer,范型版本IComparable和IComparer

    IComparable接口的主要目的是在需要比较和排序的类中实现CompareTo()方法,用于定义此类的2个对象比较的时候的默认的比较规则。

    IComparer接口的主要目的是使某个继承此接口的类实现Comapre()方法,在此方法中定义两个对象的比较规则。此类就可以作为Sort()函数的参数,用于

    在排序的时候作为比较和排序的规则。

    例如:如果我们有一个学生类Student,有4个字段:int ID;Name;Score;如果有一个学生数组或学生集合,此集合需要排序。

    则我们要做的工作为:

    1.使Student能被比较和排序,就要实现IComparable接口,在CompareTo()方法中定义默认的排序规则,例如升序。

    2.如果要实现降序,则我们需要定义一个类,此类实现IComparer接口,在Compare()中定义另外一种比较和排序的规则,例如降序。

    3.调用Sort()方法实现排序,此方法可以不带参数,按默认规则排序,也可以把实现了IComparer的接口的类的对象作为参数,这样排序时将按照

    另外一种规则排序。

    下面示例演示了按升序或降序对一个Student类的数组或集合进行了排序:

    using System;

    using System.Collections;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    namespace ConsoleApplication1

    {

    //同时实现了范型和非范型的IComparable

    public class Student:IComparable,IComparable

    {

    public int ID;

    public string Name;

    public int Score;

    public Student(int id, string name, int score)

    {

    this.ID = id;

    this.Name = name;

    this.Score = score;

    }

    public string Info()

    {

    return string.Format("学号:{0,-5}姓名:{1,-5}分数:{2}",ID,Name,Score);

    }

    int IComparable.CompareTo(object obj)

    {

    return this.Score.CompareTo((obj as Student).Score);

    }

    int IComparable.CompareTo(Student other)

    {

    return this.Score.CompareTo(other.Score);

    }

    }

    //实现了非范型的IComparer接口

    public class ReverseCompareClass : IComparer

    {

    int IComparer.Compare(object x, object y)

    {

    return ((new CaseInsensitiveComparer()).Compare(y, x));

    }

    }

    //实现了范型的IComparer接口

    public class StuReverseCompareClass : IComparer

    {

    int IComparer.Compare(Student x, Student y)

    {

    return y.Score.CompareTo(x.Score);

    }

    }

    class Program

    {

    static void Main(string[] args)

    {

    ArrayList stu = new ArrayList();

    //List stu = new List();

    int i;

    Random r = new Random();

    for (i = 0; i < 10; i++)

    {

    stu.Add( new Student(i,i.ToString(),r.Next(60,90)));

    }

    //如果使用非范型集合,我们就在sort()中使用非范型的比较类

    stu.Sort(new ReverseCompareClass());

    //如果使用范型集合,我们就在sort()中使用范型的比较类

    //stu.Sort(new StuReverseCompareClass());

    for (i = 0; i < 10; i++)

    {

    Console.WriteLine((stu[i] as Student).Info());

    //Console.WriteLine(stu[i].Info());

    }

    Console.Read();

    }

    }

    }

    使用范型的好处是:类型安全,效率高,因为不存在装箱和拆箱操作。

    展开全文
  • C# List.sort排序详解(多权重,升序降序)來源:互聯網2016-05-20 12:31:17評論C# List.sort排序详解(多权重,升序降序)很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios...默认List的排序是升序排序如果要降序排...

    C# List.sort排序详解(多权重,升序降序)

    來源:互聯網  2016-05-20 12:31:17  評論

    C# List.sort排序详解(多权重,升序降序)很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序。

    其实理解了并不难

    升序降序比较

    sort有三种结果 1,-1,0分别是大,小,相等。

    默认List的排序是升序排序

    如果要降序排序,也很简单,只需要在前面加一个负号

    List tmp = new List(){5,1,22,11,4};tmp.Sort((x, y) => -x.CompareTo(y));Console.WriteLine(tmp);//22,11,5,4,1

    对于非数值类型比较用.CompareTo(...),基于IComparable接口。基本上C#的值类型都有实现这个接口,包括string。

    而数值类型也可以自己比较。排序时左右两个变量必须是左-比较-右(被比较),切记不可反过来用。

    微软官方推荐的参数命名方式是x(左),y(右)

    多权重比较

    假设需要tuple里item2的值优先于item1。这个时候只要给比较结果*X。

    List> tmp = new List>(){ new Tuple(2,1), new Tuple(53,1), new Tuple(12,1), new Tuple(22,3), new Tuple(1,2),};tmp.Sort((x, y) => -(x.Item1.CompareTo(y.Item1) + x.Item2.CompareTo(y.Item2) * 2));Console.WriteLine(tmp);//22,3//1,2//53,1//12,1//2,1

    如果单独对升序降序控制,可以去掉大括号,分开处理

    C# List.sort排序详解(多权重,升序降序)很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序。

    其实理解了并不难

    升序降序比较

    sort有三种结果 1,-1,0分别是大,小,相等。

    默认List的排序是升序排序

    如果要降序排序,也很简单,只需要在前面加一个负号

    List tmp = new List(){5,1,22,11,4};tmp.Sort((x, y) => -x.CompareTo(y));Console.WriteLine(tmp);//22,11,5,4,1

    对于非数值类型比较用.CompareTo(...),基于IComparable接口。基本上C#的值类型都有实现这个接口,包括string。

    而数值类型也可以自己比较。排序时左右两个变量必须是左-比较-右(被比较),切记不可反过来用。

    微软官方推荐的参数命名方式是x(左),y(右)

    多权重比较

    假设需要tuple里item2的值优先于item1。这个时候只要给比较结果*X。

    List> tmp = new List>(){ new Tuple(2,1), new Tuple(53,1), new Tuple(12,1), new Tuple(22,3), new Tuple(1,2),};tmp.Sort((x, y) => -(x.Item1.CompareTo(y.Item1) + x.Item2.CompareTo(y.Item2) * 2));Console.WriteLine(tmp);//22,3//1,2//53,1//12,1//2,1

    如果单独对升序降序控制,可以去掉大括号,分开处理

    展开全文
  • List.Sort有三种结果 1,-1,0分别是大,小,相等升序降序比较,默认List的排序是升序排序如果要降序排序,也很简单,只需要在前面加一个负号List tmp = new List(){5,1,22,11,4};// 升序tmp.Sort((x, y) => x....

    List.Sort有三种结果 1,-1,0分别是大,小,相等

    升序降序比较,默认List的排序是升序排序

    如果要降序排序,也很简单,只需要在前面加一个负号

    List tmp = new List(){5,1,22,11,4};

    // 升序

    tmp.Sort((x, y) => x.CompareTo(y));

    // 降序

    tmp.Sort((x, y) => -x.CompareTo(y));

    Console.WriteLine(tmp);

    // 22,11,5,4,1

    对于非数值类型比较用.CompareTo(...),基于IComparable接口。基本上C#的值类型都有实现这个接口,包括string。

    而数值类型也可以自己比较。排序时左右两个变量必须是左-比较-右,切记不可反过来比较。

    sort方法官方推荐的 命名方式是x(左),y(右) 。对于复杂的比较 可以分出来,单独写成函数

    多权重比较

    假设需要tuple里item2的值优先于item1。这个时候只要给比较结果*2即可。

    List> tmp = new List>()

    {

    new Tuple(2,1),

    new Tuple(53,1),

    new Tuple(12,1),

    new Tuple(22,3),

    new Tuple(1,2),

    };

    tmp.Sort((x, y) => -(x.Item1.CompareTo(y.Item1) + x.Item2.CompareTo(y.Item2) * 2));

    Console.WriteLine(tmp);

    //22,3

    //1,2

    //53,1

    //12,1

    //2,1

    // List按照指定字段进行排序

    using System;

    using UnityEngine;

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine.UI;

    public class Test : MonoBehaviour

    {

    public class MyInfo

    {

    public MyInfo(string name, int level, int age)

    {

    this.name = name;

    this.level = level;

    this.age = age;

    }

    public string name;

    public int level;

    public int age;

    }

    public List myList = new List();

    void Awake()

    {

    myList.Add(new MyInfo("A", 2, 9));

    myList.Add(new MyInfo("C", 8, 6));

    myList.Add(new MyInfo("B", 6, 7));

    }

    void Update()

    {

    if (Input.GetKeyDown(KeyCode.Space))

    {

    // 兰姆达表达式,等级排序

    // 升序

    myList.Sort((x, y) => { return x.level.CompareTo(y.level); });

    // 降序

    myList.Sort((x, y) => { return -x.level.CompareTo(y.level); });

    }

    }

    }

    展开全文
  • 周末在家闲着没事,就找个知识点给自己的C#之旅...默认List的排序是升序排序。举个例子:在比较函数CompareTo()中,如果 x>y return 1;则是按照升序排列。如果x>y return -1;则是按照降序排列。这就是1和-1...
  • 背景 日常与工作中使用sort的场景还是蛮多, 最近突然在问自己,他怎样实现一个工业级 的排序算法呢?前言TimSort结合了插入排序和归并排序稳定的排序算法,并做了许多优化, 在实际应用中效率很高,因为大部分...
  • 给定一个随机整数数组,请按降序对奇数...解决方法:C还是C哪种语言(我看到两个标签)在C中,可以将std :: sort()与适当的排序功能一起使用.在C中,qsort()的工作方式类似:#include #include bool Order(int a, i...
  • gt等泛型集合类,直接提供了sort()方法用于将集合中的元素进行排序。但是,其前提集合中存放的可直接排序的基本类型,如List&ltint&gt, List&ltdouble&gt,如果我们定义了一个自定义类型 Class ...
  • 数组排序sort()。升序还是降序

    千次阅读 2019-09-11 14:50:59
    array.sort(方法函数) 1.如果不指定<方法函数>,则按unicode码顺序排列。 2.如果指定<方法函数>,则按<方法函数>所指定的排序方法排序。...b-a是降序 } var myarr = new Array("80","16",...
  • sort是Arrays类中一个静态方法,此处用针对整数数组的方法,具体用法是将一个整数数组按照从小到大的顺序排列。方法里面直接指向DualPivotQuicksort方法。public static void sort(int[] a) {...
  • JavaScript 的数组排序一个非常常见业务场景ECMAScript 为数组提供了一个原生的sort函数,今天我们就来好好看看你对sort函数究竟了解多少。首先我们来看一下sort函数的基本信息语法:arr.sort([compareFunction])...
  • 的Key值要求实现java.lang.Comparable,所以迭代的时候TreeMap默认按照Key值升序排序的;TreeMap的实现基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。HashMap<K,V>的Key值实现散列...
  • 总会忘记,如果写一个比较函数 left < right, 那么,结果是降序还是升序呢。... 则排序是升序。priority_queue 是大根堆。 如果是 return left > right; 则排序是降序。priority_queue 是小根堆...
  • 今天再给大家介绍 O365 的一个新函数 sort,毫不夸张地说,在 Excel 升级到新版本之前,sort 我最为期待的新函数之一。以下操作原本都要通过菜单来实现,自从 sort 函数问世之后,简直太方便了:对某一列排序按照...
  • 借助此事,聊一下VBA代码里面的sort方法排序,VBA其实有多种排序的方法,之前的文章也采用过冒泡的排序法,但是在Excel里面直接调用Range对象的sort的排序方式,最快的排序。sort排序其执行的Excel自带的排序...
  • 所属命名空间:System.Collections.Generic public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, ...类 ArrayList 类的泛型等效类。该类使用大小可按...
  • 2、sort by hive的sort by 也就是执行一个局部排序过程。这可以保证每个reduce的输出数据都有序的(但并非全局有效)。这样就可以提高后面进行的全局排序的效率了。对于这两种情况,语法区别...
  • NO.1数据排序在Excel表格操作方面,应用相对较多,同时也一个十分必要的操作。如何用vba对表格进行排序,下面做一个详细介绍:本示例主要以Range对象的Sort方法进行介绍,其它对象也有Sort方法,这里不做介绍,...
  • std::sort 升序降序

    千次阅读 2013-04-08 18:00:19
    这个函数返回TRUE,对排序结果的影响(升序还是降序)   于是用GTEST写了一段代码(测试代码,将就些看吧)   class HandHogRecord { public: explicitHandHogRecord(chips_type bet):bet_
  • 1.Arrays.sort(数组名且为int型)为数组排序的...注意,系统给的Arrays.sort(a)是升序 2.以下降序方法 注意需调用.Collection包 Array.sort(a,Collections.reverseOder()); 这样就可以轻松实现降序啦 示例 import j...
  • 要按升序和降序对一组随机生成的整型数组元素进行排序。要求:不提供单独的升序和降序排序方法(不分别定义一个升序和...然后排序方法可以使用这个引用对数组进行排序,排序方法无需知道自己执行的是升序还是降序排序。
  • 输入整型数组和排序标识,对其元素按照升序降序进行排序(一组测试用例可能会有多组数据) 本题有多组输入,请使用while(cin>>)处理 示例 输入 8 1 2 4 9 3 55 64 25 0 5 1 2 3 4 5 1 输出 1 2 3 4 9 25 ...
  • 在使用sort函数对自定义对象排序时,需要做以下工作之一:1)在自定义对象类重载比较操作符&gt;和&lt;2) 将对象比较规则作为一个函数指针传入sort中,... right,结果是降序还是升序呢。经过测试发现:① 如...
  • 什么是降序索引大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引索引的子集。我们通常使用下面的语句来创建一个索引:create index idx_t1_bcd on t1(b,c,d);上面sql的意思在t1表中,针对b,c,d三...
  • 两个字段的排序顺序都单向遍历的,统一升序或统一降序 3、建索引 那么,建索引时候能不能按照查询语句的顺序,[draw_num] 升序,[win_num] 降序呢? 答案可以的,删除刚才建的索引,再建一个新索引 DROP INDEX ...
  • java 自定义排序【Comparator升序降序的记法】

    万次阅读 多人点赞 2017-12-25 18:57:26
    环境java: 1.7需求今天在写排序时,忘了返回1,正序,还是-1为正序。 或者说,正序或者降序我应该如何返回。例子说明Collections.sort(companyList, new Comparator() { @Override public int compare...
  • 最近各地的高考成绩刚出,看到各地状元那神仙般的成绩,不由得让我想起知乎上一个一直热度不减的问题——“排名在前 1% 的高中生靠天赋还是靠努力?”借着上次爬知乎的代码social:python集成代码实现八爪鱼爬取...
  • sort快速排序

    2021-01-25 10:56:05
    sort快速排序 使用sort必须要有相应的头文件 ...cmp为一个函数控制sort是升序还是降序排列 bool cmp(int a,int b) { return a < b 升序排列 //return a > b 降序排列 } sort可完成对字符串、字符的排

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 172
精华内容 68
关键字:

sort是升序还是降序