gpt4 book ai didi

java - 如何对两个数组进行排序但保持它们对应的顺序?

转载 作者:行者123 更新时间:2023-12-01 16:55:07 26 4
gpt4 key购买 nike

在我的程序中,我获取成绩列表和姓名列表。成绩的顺序与姓名的顺序相对应。我想对成绩从最低到最高或从最高到最低进行排序(没关系),但保持它,以便人a和人a的成绩的索引相同。

最佳答案

首先,由于您使用的是 Java,因此执行此操作的自然方法是创建一个类,例如学生,具有年级和姓名实例成员。然后,您将获得一个可以排序的学生列表,这自然会将相关数据保存在一起。

但是,如果您需要坚持使用单独的列表,技巧是将索引列表排序到成绩列表中,而不是成绩列表本身。在比较器中,您可以比较成绩列表中相应位置的成绩,而不是指数。

List<String> grades = Arrays.asList("F", "A", "C", "D");
List<String> names = Arrays.asList("Tom", "Sue", "Dick", "Harry");

List<Integer> indexes = new ArrayList<>();
for(int i=0; i<grades.size(); i++) indexes.add(i);

indexes.sort((i1, i2) -> grades.get(i1).compareTo(grades.get(i2)));

for(Integer i : indexes)
System.out.format("%s : %s%n", names.get(i), grades.get(i));

List<String> sortedGrades = new ArrayList<>();
List<String> sortedNames = new ArrayList<>();
for(Integer i : indexes)
{
sortedGrades.add(grades.get(i));
sortedNames.add(names.get(i));
}

System.out.println();
System.out.println(sortedNames);
System.out.println(sortedGrades);

输出:

Sue : A
Dick : C
Harry : D
Tom : F

[Sue, Dick, Harry, Tom]
[A, C, D, F]

仅供比较,以下是使用 Student 类的方法:

class Student
{
String grade;
String name;
public Student(String name, String grade)
{
this.name = name;
this.grade = grade;

}
}

测试:

List<String> grades = Arrays.asList("F", "A", "C", "D");
List<String> names = Arrays.asList("Tom", "Sue", "Dick", "Harry");

List<Student> students = new ArrayList<>();
for(int i=0; i<grades.size(); i++)
students.add(new Student(names.get(i), grades.get(i)));

students.sort((s1, s2) -> s1.grade.compareTo(s2.grade));

for(Student s : students)
System.out.format("%s : %s%n", s.name, s.grade);

输出:

Sue : A
Dick : C
Harry : D
Tom : F

关于java - 如何对两个数组进行排序但保持它们对应的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61602688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com