详细讲解Sort自定义排序(JavaJavaScript)

Sort自定义排序

在java以及Javascript当中都存在sort自定义排序问题,本章将详细解释如何自定义排序规则

根据自定义函数返回值确定排序规则:

  • 如果 返回值为True(返回值 > 0),a,b交换位置,`a` 排在 `b` 前面。
  • 如果 返回值等于 0,`a` 和 `b` 顺序不变。
  • 如果 返回值为False(返回值 < 0),a,b位置不变,`a` 排在 `b` 后面。

Js实现自定义排序

在 JavaScript 中,自定义排序规则是通过 Array.prototype.sort() 方法的回调函数实现的。

数组自定义排序

数组使用sort()函数进行排序

默认情况下,sort()函数会对数组进行升序排序

let arr2 = [5, 2, 1, -10, 8];​arr2.sort()​console.log(arr2); // 8, 5, 2, 1, -10

当我们需要自定义排序规则,需要在sort()传入一个回调函数,用于自定义排序规则。

回调函数callback(a,b)

  • 如果 返回值为True(返回值 > 0),a,b交换位置,a 排在 b 前面。

  • 如果 返回值等于 0,ab 顺序不变。

  • 如果 返回值为False(返回值 < 0),a,b位置不变,a 排在 b 后面。

 let arr = [5, 2, 1, -10, 8];​// 使用自定义排序规则:升序arr.sort((a, b) => a - b); // 如果我们要升序排列即a<b, 且只有当a-b时sort()内回调函数返回值为负数,a和b的位置不变。因此回调函数返回值为a-bconsole.log(arr); // [-10, 1, 2, 5, 8]​// 使用自定义排序规则:降序arr.sort((a, b) => b - a); // 我们需要降序排序,则a>b,当b-a时sort()内回调函数返回值为负数,a和b位置不变,因此回调函数返回值为b-aconsole.log(arr); // [8, 5, 2, 1, -10]

对象自定义排序

let people = [{ name: "Alice", age: 30 },{ name: "Bob", age: 25 },{ name: "Charlie", age: 35 },];​// 按年龄升序排序people.sort((a, b) => a.age - b.age);​console.log(people);// [//   { name: 'Bob', age: 25 },//   { name: 'Alice', age: 30 },//   { name: 'Charlie', age: 35 }// ]​

Java实现自定义排序

在 Java 中,`compare` 函数主要由以下两种方式提供:

`Comparator.compare(T o1, T o2)` **返回值**:

  • `负值`:表示 `o1` 排在 `o2` 前面。
  • `0`:表示 `o1` 和 `o2` 的顺序不变(视为相等)。
  • `正值`:表示 `o1` 排在 `o2` 后面。

数组自定义排序

对整数数组进行降序排序

 import java.util.Arrays;import java.util.Comparator;​public class CustomSort {public static void main(String[] args) {Integer[] arr = {5, 2, 1, -10, 8};​// 使用 Comparator 定义降序排序规则Arrays.sort(arr, new Comparator<Integer>() {@Overridepublic int compare(Integer a, Integer b) {return b - a; // 降序}});​// 输出排序后的数组System.out.println(Arrays.toString(arr)); // [8, 5, 2, 1, -10]}}

数组的降序排序

import java.util.Arrays;​public class CustomSort {public static void main(String[] args) {Integer[] arr = {5, 2, 1, -10, 8};​// 使用 Lambda 表达式定义降序排序规则Arrays.sort(arr, (a, b) -> b - a);​System.out.println(Arrays.toString(arr)); // [8, 5, 2, 1, -10]}}

对象自定义排序

对一个 Person 类的对象列表按照年龄升序排序

import java.util.*;​class Person {String name;int age;​Person(String name, int age) {this.name = name;this.age = age;}​@Overridepublic String toString() {return name + " (" + age + ")";}}​public class CustomSort {public static void main(String[] args) {List<Person> people = new ArrayList<>();people.add(new Person("Alice", 30));people.add(new Person("Bob", 25));people.add(new Person("Charlie", 35));​// 按照年龄升序排序people.sort(new Comparator<Person>() {@Overridepublic int compare(Person p1, Person p2) {return Integer.compare(p1.age, p2.age);}});​System.out.println(people); // [Bob (25), Alice (30), Charlie (35)]}}​

对象列表排序

import java.util.*;​class Person {String name;int age;​Person(String name, int age) {this.name = name;this.age = age;}​@Overridepublic String toString() {return name + " (" + age + ")";}}​public class CustomSort {public static void main(String[] args) {List<Person> people = new ArrayList<>();people.add(new Person("Alice", 30));people.add(new Person("Bob", 25));people.add(new Person("Charlie", 35));​// 按年龄升序排序people.sort((p1, p2) -> Integer.compare(p1.age, p2.age));​System.out.println(people); // [Bob (25), Alice (30), Charlie (35)]}}

总结

对比总结:Java 与 JavaScript 的自定义排序

特性JavaJavaScript
排序方法Arrays.sort / List.sortArray.prototype.sort
自定义规则实现方式Comparator 接口 或 Lambda 表达式排序函数(compareFunction
支持对象排序使用 Comparator 针对属性排序排序函数中通过对象属性定义排序逻辑
多条件排序使用嵌套 compare 或链式条件判断使用多个 if 或排序权重逻辑
主要区别更强类型约束;适合大规模集合的排序灵活、动态,无需显式声明类型

两种语言的自定义排序机制都很灵活,但 Java 偏重于类型安全和面向对象,而 JavaScript 更加动态和简洁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482059.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解Java集合的基本用法—Collection:List、Set 和 Queue,Map

本博文部分参考 博客 &#xff0c;强烈推荐这篇博客&#xff0c;写得超级全面&#xff01;&#xff01;&#xff01; 图片来源 Java 集合框架 主要包括两种类型的容器&#xff0c;一种是集合&#xff08;Collection&#xff09;&#xff0c;存储一个元素集合&#xff08;单列…

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出&#xff0c;万山无阻 目录 &#x1f4d6;一、算法思想 细节问题 &#x1f4da;左右临界 &#x1f4da;中点选择 &#x1f4da;…

[CTF/网络安全] 攻防世界 upload1 解题详析

[CTF/网络安全] 攻防世界 upload1 解题详析 考察文件上传&#xff0c;具体原理及姿势不再赘述。 姿势 在txt中写入一句话木马<?php eval($_POST[qiu]);?> 回显如下&#xff1a; 查看源代码&#xff1a; Array.prototype.contains function (obj) { var i this.…

网络安全运行与维护 加固练习题

1. 提交用户密码的最小长度要求。 输入代码: cat /etc/pam.d/common-password 提交答案: flag{20} 2.提交iptables配置以允许10.0.0.0/24网段访问22端口的命令。 输入代码: iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT 提交答案: flag{iptables -A I…

PID模糊控制算法(附MATLAB仿真程序)

一、基本原理 PID模糊控制算法是一种将传统PID控制与模糊逻辑相结合的控制策略。它利用模糊逻辑处理不确定性和非线性问题的能力&#xff0c;以提高控制系统的性能。以下是PID模糊控制算法的基本原理&#xff1a; 1.1. **误差和误差变化率的计算**&#xff1a; - 首先&…

【leetcode100】螺旋矩阵

1、题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 2、初始思路 2.1 思路 定义上下左右…

2024.11.29(单链表)

思维导图 声明文件 #ifndef __LINKLIST_H__ #define __LINKLIST_H__#include <myhead.h>typedef char datatype; //数据元素类型 //定义节点类型 typedef struct Node {union{int len; //头节点数据域datatype data; //普通节点数据域};struct Node *next; //指针域…

第六届金盾信安杯-SSRF

操作内容&#xff1a; 进入环境 可以查询网站信息 查询环境url https://114.55.67.167:52263/flag.php 返回 flag 就在这 https://114.55.67.167:52263/flag.php 把这个转换成短连接&#xff0c;然后再提交 得出 flag

【Linux】进程控制,手搓简洁版shell

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、进程创建2、进程终止3、进程等待4、进程程序替换5、手写简洁版shell 1、进程创建 fork函数&#xff1a;从已经存在的进程中创…

逆向攻防世界CTF系列42-reverse_re3

逆向攻防世界CTF系列42-reverse_re3 参考&#xff1a;CTF-reverse-reverse_re3&#xff08;全网最详细wp&#xff0c;超4000字有效解析&#xff09;_ctfreverse题目-CSDN博客 64位无壳 _int64 __fastcall main(__int64 a1, char **a2, char **a3) {int v4; // [rsp4h] [rbp-…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网&#xff0c;查看 RabbitMQ 需要的 Erlang 支持&#xff1a;https://www.rabbitmq.com/ 进入官网&#xff0c;在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …

ECharts柱状图-交错正负轴标签,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

Scala关于成绩的常规操作

score.txt中的数据&#xff1a; 姓名&#xff0c;语文&#xff0c;数学&#xff0c;英语 张伟&#xff0c;87&#xff0c;92&#xff0c;88 李娜&#xff0c;90&#xff0c;85&#xff0c;95 王强&#xff0c;78&#xff0c;90&#xff0c;82 赵敏&#xff0c;92&#xff0c;8…

【机器学习】入门机器学习:从理论到代码实践

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 机器学习&#xff08;Machine Learning&#xff09;是人工智能的一个分支&#xff0c;它通过算法从数据中学习规律&#xff0c;并基于这些规律进行…

Spring Web开发(请求)获取JOSN对象| 获取数据(Header)

大家好&#xff0c;我叫小帅今天我们来继续Spring Boot的内容。 文章目录 1. 获取JSON对象2. 获取URL中参数PathVariable3.上传⽂件RequestPart3. 获取Cookie/Session3.1 获取和设置Cookie3.1.1传统获取Cookie3.1.2简洁获取Cookie 3. 2 获取和存储Session3.2.1获取Session&…

[Deep Learning] 深度学习中常用函数的整理与介绍(pytorch为例)

文章目录 深度学习中常用函数的整理与介绍常见损失函数1. L2_loss | nn.MSELoss()公式表示&#xff1a;特点&#xff1a;应用&#xff1a;缺点&#xff1a;主要参数&#xff1a;示例用法&#xff1a;注意事项&#xff1a; 2. L1 Loss | nn.L1Loss数学定义&#xff1a;特点&…

0017. shell命令--tac

目录 17. shell命令--tac 功能说明 语法格式 选项说明 实践操作 注意事项 17. shell命令--tac 功能说明 Linux 的 tac 命令用于按行反向输出文件内容&#xff0c;与 cat 命令的输出顺序相反。非常有趣&#xff0c;好记。也就是说&#xff0c;当我们使用tac命令查看文件内…

SpringBoot整合Retry详细教程

问题背景 在现代的分布式系统中&#xff0c;服务间的调用往往需要处理各种网络异常、超时等问题。重试机制是一种常见的解决策略&#xff0c;它允许应用程序在网络故障或临时性错误后自动重新尝试失败的操作。Spring Boot 提供了灵活的方式来集成重试机制&#xff0c;这可以通过…

爬取boss直聘上海市人工智能招聘信息+LDA主题建模

爬取boss直聘上海市人工智能招聘信息 import time import tqdm import random import requests import json import pandas as pd import os from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriv…

项目快过:知识蒸馏 | 目标检测 |FGD | Focal and Global Knowledge Distillation for Detectors

公开时间&#xff1a;2022年3月9号 项目地址&#xff1a;https://github.com/yzd-v/FGD 论文地址&#xff1a;https://arxiv.org/pdf/2111.11837 知识蒸馏已成功地应用于图像分类。然而&#xff0c;目标检测要复杂得多&#xff0c;大多数知识蒸馏方法都失败了。本文指出&#…