Python
使用lambda比较器
money = [[1, 3], [2, 5], [4, 7], [3, 4], [3, 5]]
money.sort(key = lambda x: (-x[0], x[1])) # 0位降序,1位升序
print(money)
sorted(money) # 注意这个排序不会改变原数组的顺序,必须立即使用
print(money) # 仍为[[1, 3], [2, 5], [4, 7], [3, 4], [3, 5]]
print(sorted(money)) # 才会显示排序的结果
也可以自定义cmp比较函数放入sort中,请小伙伴们手动实现,这里不再演示。
C++
使用自定义的比较器
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<vector<int>> money = {{1, 3}, {2, 5}, {4, 7},{3, 4},{3, 5}};
sort(money.begin(), money.end(), [&](const auto& a, const auto& b) {
if(a[0] != b[0])
return a[0] > b[0]; // 从大到小
else
return a[1] < b[1]; // 从小到大
});
cout<<money[1][1]<<endl;
}
Java
1.使用lambda表达式定义
import java.util.Arrays;
// 一维
Integer[] money = {1, 2, 4, 2, 5}; // 注意这里需要使用Integer类型,不能用int
Arrays.sort(money, (a, b) -> b - a); // 降序
System.out.println(Arrays.toString(money));
// 多维
int[][] money = {{1, 3}, {2, 5}, {4, 7},{3, 4},{3, 5}};
Arrays.sort(money, (a, b) -> (a[0] - b[0])); // 只有一种序列(这里只判断0号位)
// 也可以判断多个位置
Arrays.sort(money, (int[] a, int[] b) -> {
if(a[0] != b[0])
return b[0] - a[0]; // 从大到小
else
return a[1] - b[1]; // 从小到大
});
for(int[] x: money)
System.out.println(Arrays.toString(x));
2.重写compare方法
import java.util.Arrays;
int[][] money = {{1, 3}, {2, 5}, {4, 7},{3, 4},{3, 5}};
Arrays.sort(money, new Comparator<int[]>() {
public int compare (int[] a, int[] b) {
if(a[0] != b[0])
return b[0] - a[0]; // 从大到小
else
return a[1] - b[1]; // 从小到大
}
});
for(int[] x: money)
System.out.println(Arrays.toString(x));
3.如果是字符串,可以使用compareTo方法
import java.util.Arrays;
public class HelloWorld {
public static void main(String []args) {
String[] money = {"baab", "asba", "baa"};
Arrays.sort(money, (a, b) -> a.compareTo(b)); // 按照字典序排列
System.out.println(Arrays.toString(money));
}
}