验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

如何实现多字段排序

阅读:533 来源:乙速云 作者:代码code

如何实现多字段排序

多字段排序指的是先按某个字段排序,当该字段相同时,再按另一个字段排序,依此类推。不同语言和场景实现方式略有不同,下面给你常见、实用的几种做法。


一、SQL 中的多字段排序(最常见)

基本语法

SELECT *
FROM 表名
ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC], ...;

示例

-- 先按部门升序,再按工资降序
SELECT *
FROM employee
ORDER BY department ASC, salary DESC;

✅ 排序规则:

  • 先按 department 排序
  • department 相同的情况下,再按 salary 排序

二、Python 中的多字段排序

1️⃣ 使用 sorted() / list.sort()

data = [
    {"name": "张三", "age": 20, "score": 90},
    {"name": "李四", "age": 20, "score": 95},
    {"name": "王五", "age": 18, "score": 90},
]

# 先按 age 升序,再按 score 降序
sorted_data = sorted(
    data,
    key=lambda x: (x["age"], -x["score"])
)

⚠️ 注意:
-x["score"] 只适用于数字类型。


2️⃣ 更通用的写法(推荐)

from functools import cmp_to_key

def compare(a, b):
    if a["age"] != b["age"]:
        return a["age"] - b["age"]
    if a["score"] != b["score"]:
        return b["score"] - a["score"]
    return 0

sorted_data = sorted(data, key=cmp_to_key(compare))

三、Java 中的多字段排序

1️⃣ 使用 Comparator

Collections.sort(list, (a, b) -> {
    int c1 = a.getAge().compareTo(b.getAge());
    if (c1 != 0) return c1;

    return b.getScore().compareTo(a.getScore()); // 降序
});

2️⃣ Java 8 Stream 写法

list.stream()
    .sorted(
        Comparator.comparing(Person::getAge)
                  .thenComparing(Comparator.comparing(Person::getScore).reversed())
    )
    .collect(Collectors.toList());

四、JavaScript 中的多字段排序

data.sort((a, b) => {
  if (a.age !== b.age) {
    return a.age - b.age;
  }
  return b.score - a.score;
});

五、Excel / Pandas 多字段排序

Pandas

df.sort_values(
    by=["age", "score"],
    ascending=[True, False],
    inplace=True
)

六、总结对照表

场景 核心思路
SQL ORDER BY a ASC, b DESC
Python sorted(key=lambda x: (x.a, -x.b))
Java Comparator.thenComparing
JS 比较函数逐级判断
Pandas sort_values(by=[...])

如果你能告诉我具体使用场景(数据库 / 编程语言 / 前端 / 后端),我可以给你更贴近实战的示例。

分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>