精华内容
下载资源
问答
  • 2019-12-10 11:11:12

    数组排序sort

    sort里面不加参数,默认是升序排序

    let arr = [1, 8, 2, 9];
    arr.sort();
    console.log(arr); // [1, 2, 8, 9]
    

    如果想要降序排序,可以加参数改变,如下所示:

    let arr = ['a', 'b', 'd', 'c'];
    arr.sort(function (a, b) {
    	if(a > b){
    		return -1;
    	}else if(b > a){
    		return 1;
    	}else{
    		return 0;
    	}
    });
    

    如果数组中的元素是数值类型,如果需要升序排序,那么就返回a - b;如果需要降序排序,那么就返回b-a;,如下所示:

    let arr = [1, 5, 3, 7, 6];
    arr.sort(function (a, b) {
    	return a - b;
    });
    

    如果要以数组中字符串长度进行排序,如下所示:

    let arr = ['1234', '56', '23980', '234', '7'];
    arr.sort(function (a, b) {
    	return a.length - b.length;
    });
    

    如果要比较数组中的对象中的某个属性值进行排序,如下所示:

    let arr = [
    {name: 'ww', age: 12},
    {name: 'gg', age: 8},
    {name: 'uu', age: 69}
    ];
    arr.sort(function (a, b) {
    	return a.age - b.age;
    });
    
    更多相关内容
  • ArrayList的sort方法

    千次阅读 2021-08-04 15:37:12
    ArrayList的sort方法 里面传入一个比较器接口。 需要实现compare方法。 compare方法的返回值如果是正数,那么将o1放在o2的后面,如果是负数,那么将o1放在o2的前面. 使用的经常还是冒泡排序。 import java.util....

    ArrayList的sort方法

    里面传入一个比较器接口。
    需要实现compare方法。
    compare方法的返回值如果是正数,那么将o1放在o2的后面,如果是负数,那么将o1放在o2的前面.
    使用的经常还是冒泡排序。

    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.List;
    
    public class SortDemo {
    	public static void main(String[] args) {
    		
    		List<String> list = new ArrayList<String>();
    		list.add("sadf");
    		list.add("aadf");
    		list.add("tytadf");
    		list.add("yuhf");
    		list.add("ewrqf");
    		list.add("oty");
    		System.out.println(list);
    		// 排序
    		// 根据字符串的首字符进行排序(升序 从小到大)
    		list.sort(new Comparator<String>() {
    
    			@Override
    			// 根据int值是正数还是负数来排序
    			// 返回值如果是负数:o1放在o2的前面
    			// 返回值如果是正数;o1放在o2的后面
    			public int compare(String o1, String o2) {
    				// TODO Auto-generated method stub
    				return o1.charAt(0) - o2.charAt(0);//升序
    
    				return o2.charAt(0) - o1.charAt(0);//降序
    			}
    		});
    		System.out.println(list);
    	}
    }
    
    展开全文
  • python中 sort方法 和sorted函数

    千次阅读 2020-11-29 18:41:41
    sort和sorted在python中常用语列表(或类列表)的排序,但是在python中有所区别。他们的唯一的共同点恐怕就是都可以对列表排序,区别:1. sorted是python的内置函数,可以对列表(list),元祖(tuple),字典(dict...

    sort和sorted在python中常用语列表(或类列表)的排序,但是在python中有所区别。

    他们的唯一的共同点恐怕就是都可以对列表排序,区别:

    1. sorted是python的内置函数,可以对列表(list),元祖(tuple),字典(dict)和字符串(str)进行排序,排序对象作为sorted函数的参数,使用示例如下:

    a_tuple =(1,3,2,4)

    sorted(a_list)

    (1,2,3,4) #返回

    2. sort() 是列表类的方法,只能对列表排序。sorted()对列表排序时,有返回值;sorte()对列表排序时,无法返回值(直接在原列表中操作)。

    a_list = [1,3,5,2]

    a_list.sort() #执行后无法返回

    a_list #再次访问a_list时,列表已经被排序

    [1,2,3,5]

    a_list = [1,3,5,2]

    sorted(a_list) #执行后直接返回结果,不改变原来的列表

    [1,2,3,5]

    -----

    sort 方法和 sorted 函数的异同

    官方用法

    sort 的用法:

    sort(self, /, *, key=None, reverse=False)

    Sort the list in ascending order and return None.

    The sort is in-place (i.e. the list itself is modified) and stable (i.e. the

    order of two equal elements is maintained).

    If a key function is given, apply it once to each list item and sort them,

    ascending or descending, according to their function values.

    The reverse flag can be set to sort in descending order.

    sorted 的用法:

    Help on built-in function sorted in module builtins:

    sorted(iterable, /, *, key=None, reverse=False)

    Return a new list containing all items from the iterable in ascending order.

    A custom key function can be supplied to customize the sort order, and the

    reverse flag can be set to request the result in descending order.

    相同点:

    sort 和 sorted 都有两个可选仅限关键字参数 key 和 reverse,都是默认升序排序。

    不同点:

    1.sort 是列表的一个方法,它的第一个参数是 self,即列表实例对象本身;

    sorted 是内置函数,它的第一个参数是 iterable,即可迭代对象。

    所以 sorted 不止可以作用于列表,还可以作用于元组、字典等可迭代对象。

    2.sort 方法是对列表原地排序,返回值是 None;

    sorted 函数是返回一个新的列表,不改变原可迭代对象。

    3.sort 方法不能级联调用,sorted 函数可以级联调用。

    ---

    sort 方法和 sorted 函数的基本用法

    方法(Method)和函数(Function),很多时候大多数人不区分方法和函数,基本当做一回事,这其实没啥问题。但是看 Python 官方文档的时候,有时候出现 Method 有时候又是 Function,让人很头疼,所以区分一下方法和函数还是有好处的。其实区分也比较简单。

    方法(Method):是通过 obj.funcname() 来引用调用。

    如:列表的 sort 方法,调用时就是 list.sort()。

    函数(Function):是通过 funcname() 直接调用。

    如内置函数(built-in function) sorted,调用时就是 sorted()。

    注:Python API 的一个惯例(convention)是:

    如果一个函数或者方法是原地改变对象,那么应该返回 None。

    这么做的目的是为了告诉调用者对象被原地改变了。

    这个约定的弊端是无法级联调用(cascade call)这些方法。

    而返回新对象的方法可以级联调用,从而形成连贯的接口(fluent interface)。

    sort 方法和 sorted 基本使用

    list.sort():对列表进行原地(in place)排序,默认是升序,返回值是 None。

    sorted():对可迭代对象进行排序,默认是升序,并把排序结果作为一个新的列表返回,原迭代对象顺序不受影响。

    >>> list_a = [1, 5, 6, 4, 2, 3]

    >>> sorted(list_a) # 返回一个新的排好序的 list

    [1, 2, 3, 4, 5, 6]

    >>> list_a # list_a 不改变

    [1, 5, 6, 4, 2, 3]

    >>> print(list_a.sort()) # list_a.sort() 就地排序,返回值是 None

    None

    >>> list_a # list_a 发生改变

    [1, 2, 3, 4, 5, 6]

    sorted 函数除了用于列表,还可用于其他可迭代对象,如元组、生成器等。

    sorted((1, 5, 9, 2, 6, 8, 7)) # 对元组排序

    [1, 2, 5, 6, 7, 8, 9]

    sorted('afbcedh') # 对字符串排序

    ['a', 'b', 'c', 'd', 'e', 'f', 'h']

    list(range(10,0,-1))

    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

    sorted(range(10,0,-1)) # 对生成器排序

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})

    [1, 2, 3, 4, 5]

    降序可选仅限关键字参数 reverse

    sort 方法和 sorted 函数都可以接收一个可选仅限关键字参数(keyword-only arguments) reverse,用于指定是升序(Ascending)还是降序(Descending)。

    默认 reverse=False 即升序排序。

    list_a = [3, 1, 2, 4]

    sorted(list_a) # 默认升序

    [1, 2, 3, 4]

    sorted(list_a, reverse=True) # 降序排序

    [4, 3, 2, 1]

    list_a # list_a 不变

    [3, 1, 2, 4]

    list_a.sort() # 默认原地升序排序

    list_a

    [1, 2, 3, 4]

    list_a.sort(reverse=True) # 原地降序排序

    list_a

    [4, 3, 2, 1]

    注: 仅限关键字参数 即只能通过 keyword=value 的形式传参的参数叫仅限关键字参数,有关 Python 函数仅限关键字参数、仅限位置参数、可变参数、默认参数、位置参数、可变关键字参数等可以参看我的另一篇总结。一文了解Python函数

    接下来我们介绍另一个更加强大的可选仅限关键字参数 key。

    可选仅限关键字参数 key

    sort 方法和 sorted 函数还可以接收一个可选仅限关键字参数 key,key 是一个只有一个参数的函数,这个函数会依次作用于序列的每一个元素,并将所得的结果作为排序的依据。key 默认是 None,即恒等函数(identity function),也就是默认用元素自己的值排序。

    举栗子:

    >>> list_a = ['This', 'is', 'a', 'test', 'string', 'from', 'Andrew']

    >>> sorted(list_a, key=str.lower)

    ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

    >>> list_a

    ['This', 'is', 'a', 'test', 'string', 'from', 'Andrew']

    这里的 key=str.lower 就是把 list_a 中的每个元素都用 str.lower 方法处理,即:都转为小写,然后再进行比较排序。

    对于复杂的数据对象,我们可以用对象的索引,取对象的一部分作为比较的 key,这时匿名函数会帮助我们,举栗子:

    >>> student_tuples = [

    ... ('john', 'A', 15),

    ... ('jane', 'B', 12),

    ... ('dave', 'B', 10),

    ... ]

    >>> sorted(student_tuples, key=lambda student: student[2]) # 根据年龄排序

    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    我们还可以取对象的属性作为比较的 key,举栗子:

    >>> class Student:

    ... def __init__(self, name, grade, age):

    ... self.name = name

    ... self.grade = grade

    ... self.age = age

    ... def __repr__(self):

    ... return repr((self.name, self.grade, self.age))

    ...

    >>> student_objects = [

    ... Student('john', 'A', 15),

    ... Student('jane', 'B', 12),

    ... Student('dave', 'B', 10),

    ... ]

    >>> sorted(student_objects, key=lambda student: student.age) # 按年龄进行排序

    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    可以看到 key 非常的强大!使得复杂的数据结构可以按照我们自己的意愿进行排序。

    list.sort、sorted、max 和 min 中可选仅限关键字参数 key 的设计非常棒!使用 key 会更加高效且简洁。简单是指你只需要定义一个只有一个参数的函数,用于排序即可。高效是指 key 的函数在每个元素上只会调用一次,而双参数比较函数,则每次两两比较的时候都会被调用。(PS:这一点还不是特别理解)

    operator 模块的使用

    因为通过索引或者属性以及函数来排序非常常用,所以 Python 内置的 operator 模块提供了 itemgetter(), attrgetter() 和 methodcaller() 函数来更加简单而快速的实现相关的功能。

    >>> from operator import itemgetter, attrgetter # 导入相关的函数

    >>> sorted(student_tuples, key=itemgetter(2)) # 按索引取值排序

    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    >>> sorted(student_objects, key=attrgetter('age')) # 按属性取值排序

    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    此外,通过 operator 模块还可以轻松实现多级排序,比如上面的学生列表,先按成绩排序,再按年龄排序。

    >>> sorted(student_tuples, key=itemgetter(1,2))

    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

    >>> sorted(student_objects, key=attrgetter('grade', 'age'))

    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

    sort 方法和 sorted 函数背后的排序算法

    sorted 和 list.sort 背后的排序算法都是 Timsort 算法,它是一种自适应算法,会根据原始数据的特点交替使用归并排序(merge sort)和插入排序(insertion sort)。

    在实际应用场景中这是非常有效的一种稳定排序算法。Timsort 在 2002 年开始在 CPython 中使用,2009 年起,开始在 Java 和 Android 中使用。

    这里解释一下稳定排序算法,它指排序前和排序后,值相同的元素不交换位置。

    >>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]

    >>> sorted(data, key=itemgetter(0)) # 按照颜色排序

    [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]

    可以看到原始序列是 (‘red’, 1) 在 (‘red’, 2)前面,排序后,因为 red 相同,二者不交换位置,(‘red’, 1) 依然在 (‘red’, 2)前面,这就叫做稳定排序。反之,如果交换了,就叫不稳定。

    稳定排序非常重要,因为它可以让我们进行多步排序。

    比如我们要实现对学生数据进行排序,要求是以成绩降序排列,如果成绩相同,则再按年龄升序排序。

    那么我们可以通过两步实现:第 1 步是先以年龄升序排列,第 2 步再以成绩等级降序排列。注:按照算法,升序的话,B 的等级排在 A 后面。

    代码如下:

    >>> s = sorted(student_objects, key=attrgetter('age'))

    >>> sorted(s, key=attrgetter('grade'), reverse=True)

    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    上面就实现了成绩降序排序,成绩相同则年龄升序排序。上面的代码我们也可以整合到一行,要注意顺序:

    >>> sorted(sorted(student_objects, key=attrgetter('age')), key=attrgetter('grade'), reverse=True)

    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    Python 大多数排序(sort 方法和 sorted 函数)用的都是 Timsort 排序算法,它是一种混和的稳定排序算法,更多关于 Timsort 排序算法的知识可以参考学习Wiki Timsort

    巨人的肩膀

    展开全文
  • js中的sort方法

    千次阅读 2019-04-09 21:36:26
    js中的sort方法不同于Java中的soft方法,默认的按照升序排列数组项–最小的排在最前面,最大的排在最后面。 但在js中,sort方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序,即使...

    soft()方法原理

    js中的sort方法不同于Java中的soft方法,默认的按照升序排列数组项–最小的排在最前面,最大的排在最后面。
    但在js中,sort方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序,即使数组中每一项都是数组,sort()方法比较的也是字符串。
    如:

    var values = [0.1,5,10,15];
    values.sort();
    alert(values);///0,1,10,15,5
    

    可见,即使例子中的值的顺序没有问题,但soft()方法也会根据cesium字符串的结果改变原来的顺序。因为数值5虽然小于10,但在进行字符串比较时,“10”位于“5”的前面,于是数组的顺序就被修改了。所以在大部分,这种排序方法不是最佳的方法。
    但soft()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值前面。
    该比较函数接收两个参数,如果第一个参数应该位于第二个参数的前面则返回一个负数,如果两个参数相等,则返回0,如果第一个参数应位于第二个参数的之后,则返回一个正数,以下就是一个简单的比较函数

    function compare(value1,value2){
    if(value1 < value2){
        return -1;
    }else if(value1 > value2){
       return 1;
    }else{
       return 0;
    }
    }
    

    上述的比较函数可以适用于大都数数据类型,只要将其作为参数传递给soft()方法即可,如下:

    var values = [0.1,5,10,15];
    values.sort(compare);
    alert(values);///0,1,5,10,15
    

    如果想要达到降序的结果,就是将比较函数改动一下

    function compare(value1,value2){
    if(value1 < value2){
        return 1;
    }else if(value1 > value2){
       return -1;
    }else{
       return 0;
    }
    }
    
    var values = [0.1,5,10,15];
    values.sort(compare);
    alert(values);///0,1,5,10,15
    

    当然想要反转数组原来的顺序,直接使用reverse()方法即可

    总结

    对于数值类型或者其valueOf()方法会返回数值类型的对象类型,可以使用一个更简单的比较函数。这个函数只要用第二个参数减去第一个参数即可

    function compare(value1,value2){
    return value2-value1;
    }
    
    

    由于比较函数通过返回一个小于零,等于零或者大于零的值影响排序结果,因此减法操作就可以适当的处理所有这些情况。

    展开全文
  • Vue中通过sort方法实现快速排序

    千次阅读 2021-03-31 18:51:49
    技术:通过sort方法可以实现id ,价格 等等想要的快速排序方法。 <template> <div> <div> <input type="text" placeholder="商品名称" v-model="queryInfor.name" /> </div> <...
  • JS中数组排序sort方法

    千次阅读 2020-11-24 16:19:32
    一、按照字符串方法排序 arr=[1,14,3,4]; arr.sort(); console.log(arr); 二、数值升序排序 let arr = [1,22,11,2,4] arr.sort(function (a,b) { return a-b }) console.log(arr); 三、数值降序排序 let...
  • Python每日一练——列表,元组和字典第九关:列表的sort方法/sorted函数
  • Java 中的sort方法

    万次阅读 2019-04-17 18:58:45
    Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,下面要说的就是Collections工具类里面排序操作中的sort方法。 首先创建一个list...
  • 理解js中sort方法的使用

    千次阅读 2020-11-22 10:53:25
    2)实例 实例一:实现从小到大排序 实例二:把数组排成最小的数 3)sort函数实现原理 总结 前言 第一次使用sort方法时,发现数组并不是按照大小顺序排序,查看手册,发现如果想按照其他标准进行排序,就需要提供...
  • 数组sort方法实现列表的正序和倒序

    千次阅读 2020-09-02 19:55:26
    数组sort方法实现列表的正序和倒序 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> ...
  • 一篇文章带你搞定 Python 中 sort 方法与 sorted 函数

    千次阅读 多人点赞 2019-08-16 09:58:50
    Python 列表有一个内置的 list.sort() 方法可以直接修改列表 还有一个 sorted() 内置函数,它会从一个可迭代对象构建一个新的排序列表 文章目录一、基本排序二、关键函数三、Operator 函数五、升序和降序六、补充:...
  • Python列表排序 list.sort方法和内置函数sorted

    万次阅读 多人点赞 2019-05-18 15:17:54
    Python列表排序 list.sort方法和内置函数sorted 很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list....
  • C/C++中sort方法-自定义排序规则

    千次阅读 2020-06-06 17:06:40
    sort方法之自定义排序规则sort中直接定义排序规则对结构体进行排序 sort中直接定义排序规则 题目:我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间...
  • js数组方法中的sort方法是很实用排序方法,可以对数组进行快速的正序排序,倒叙排序,或者是自定义排序。它的使用方法在很多文档中都可以查到,这里主要讲sort的原理。【JavaScript】巧妙使用数组sort排序方法 var...
  • c#范型List的Sort方法详解

    千次阅读 2016-08-26 15:56:36
    .net2005中的范型List类的Sort方法有四种形式,分别是 1,不带有任何参数的Sort方法----Sort(); 2,带有比较器参数的Sort方法 ----Sort(IComparer) 3,带有比较代理方法参数的Sort方法----Sort(Comparison)>)) ...
  • Java Arraylist的sort方法使用

    千次阅读 2019-06-09 20:26:32
    package sort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Sort { public static void main(String[] args) { L...
  • arr.sort([compareFunction]) 参数 在JavaScript中 方括号 里的内容是可选的,可就是compareFunction这个参数是可填可不填的。 compareFunction 是一个函数,用来指定按某种顺序进行排列的函数。 如果省略,元素按照...
  • C# sort 方法详解及示例

    万次阅读 2016-11-07 11:20:15
    诸如List等泛型集合类,直接提供了sort()方法用于将集合中的元素进行排序。 但是,其前提是集合中存放的是可直接排序的基本类型,如List, List,如果 我们定义了一个自定义类型 Class MyClass,并创建一个...
  • Java使用sort方法对二维数组进行排序

    千次阅读 2020-09-02 10:10:44
    Java使用sort方法对二维数组进行排序 ** sort方法的参数列表除了需要排序的数组以外,还有一个comparator参数,用于指定排序的准则,在对一维数据进行排序时,使用默认的排序准则,因此缺省不写。但是对二维数组进行...
  • 前言 针对一个数组进行排序,一个很常见的需求.尤其在后端.当然,前端也是有这个...标准答案,sort方法 var arr = [45,98,67,57,85,6,58,83,48,18]; console.log('原数组'); console.log(arr); console.log('sort方...
  • list.sort方法与sorted()函数的返回值

    千次阅读 2020-12-08 20:25:05
    TypeError: ‘NoneType’ object is not subscriptable: 关于list.sort排序为None 问题描述: 代码如下: ...list.sort 方法会就地排序列表,也就是说不会把原列表复制一份。这也是这个方法的返回值是 N
  • JS 数组sort方法为什么升序是a-b

    千次阅读 多人点赞 2020-07-23 16:04:12
    这样的结果很明显不能满足大多数问题的需求,所以我们可以在调用sort方法的时候,传入一个回调函数,从而改变 sort 方法的排序方式。先放结果,下列两次排序分别为 升序排序 和 降序排序 。 var arr = [1, 22, 15...
  • 前言:在之前写过一篇【JavaScript】数组的sort方法排序原理详解。 sort排序方法实现很巧妙,运用也可以很巧妙,不但可以进行数组数字之间进行排序,还可以将数组内的对象进行排序。   一、将数组内的对象进行...
  • 泛型 List中的Sort方法

    万次阅读 2017-09-01 19:08:19
    对于List按照某一个字段的值进行排序,使用系统提供的sort方法进行排序,需要继承ICompare接口实现参数中的CompareTo方法,注意参数一定是Object。CompareTo方法只能进行两个数据的比较,但是系统可以实现对整个list...
  • Java 集合排序(sort方法

    千次阅读 2018-09-17 23:28:36
    ... import java.util.*; import javax.swing.plaf.synth.SynthScrollBarUI; import java.time.*;...import java.time.format.DateTimeFormatter... Collections.sort(list); System.out.println(list); } }  
  • javascript中sort方法的完整解析--排序

    万次阅读 多人点赞 2018-01-10 11:21:59
    说起对数组的排序,大家能想到的应该是冒泡排序,快速排序,sort排序,以及希尔排序吧,但是可能对sort排序只停留再数组层面(每个元素均是数字或者字符串),事实上,它还可以对对象进行排序。 原理是:不管元素是...
  • sort方法对数组排序

    千次阅读 2018-11-01 17:31:55
    【8】用sort方法排序 package array; /* * 用sort方法排序 * 引入包Arrays,因为Arrays.sort需要此包 */ import java.util.Arrays; public class array3 { public static void main(String[] args) { int[] a...
  • Arrays的sort方法可以直接对数据进行升序和降序排列。本人小白,前段时间刚学到sort方法时,看到Arrays操作数组只能升序,使用了很多奇怪的办法来进行降序。例如: import java.util.Arrays; public class ...
  • java中数组排序arrays.sort方法应用

    千次阅读 2017-08-07 14:32:32
    java中数组排序arrays.sort方法应用  arrays.sort方法java中的数组排序。  Arrays.sort(*Array) 需加包import java.util.*;或import java.util.Arrays;  Arrays.sort(数组名)为数组排序的操作,但这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 711,064
精华内容 284,425
关键字:

sort方法

友情链接: MYCAR1.rar