Java 如何在不丢失对索引内容的引用的情况下对数组进行排序?

Java 如何在不丢失对索引内容的引用的情况下对数组进行排序?,java,arrays,sorting,Java,Arrays,Sorting,好的。我实际上是一个完全的编码初学者(上过一些课,但学习速度慢/密度大),答案可能非常简单。我有一个字符串数组,它有名字,另一个有关联的分数 names[0] = blinky scores[0] = 42 (blinky's score) names[1] = inky scores[1] = 37 (inky's score) 在for循环中,我调用数字(索引数字?我对术语很糟糕。唯一有意义的是代码本身)。不管怎么说,我想保留我自己 我想列一个清单,把名字和分数按从高

好的。我实际上是一个完全的编码初学者(上过一些课,但学习速度慢/密度大),答案可能非常简单。我有一个字符串数组,它有名字,另一个有关联的分数

names[0] = blinky   
scores[0] = 42 (blinky's score)   
names[1] = inky   
scores[1] = 37 (inky's score)  
在for循环中,我调用数字(索引数字?我对术语很糟糕。唯一有意义的是代码本身)。不管怎么说,我想保留我自己

我想列一个清单,把名字和分数按从高到低的顺序排列

我不知道使用util.array或任何自动排序的工具是否会有所帮助。我相信我将不得不手动对它们进行排序,以保持名称和数字对齐

//Example  
String[] names = {"Blinky","Inky","Pinky","Clyde"};  
int[] scores = {42,37,67,50};  

for (int = 0; i < scores.length; i++){  
System.out.println("what do?")  
}
//示例
String[]name={“Blinky”、“Inky”、“Pinky”、“Clyde”};
int[]得分={42,37,67,50};
对于(int=0;i
我该如何着手制作一份名单,把名字按顺序排列?越简单越好。 我非常感谢你的帮助


编辑:我要感谢你们所有人的帮助!:)

你应该使用一个
树形图
,它将始终保持分数之间的顺序,并匹配相应的
字符串

// new TreeMap that sorts from highest to lowest
Map<Integer, String> map = new TreeMap<>(Collections.reverseOrder());
最后,您只需打印
地图

System.out.println(map);
结果:

{67=Pinky,50=Clyde,42=Blinky,37=Inky}


要获得以下结果,您可以尝试以下代码

Unsorted
---------
Blinky, score=42
Inky, score=37
Pinky, score=67
Clyde, score=50
sort by score ascending
Inky, score=37
Blinky, score=42
Clyde, score=50
Pinky, score=67 
sort by Name ascending 
Blinky, score=42
Clyde, score=50
Inky, score=37
Pinky, score=67
1) 创建一个名为NameScoreEntity的新类,将两个变量存储在一起(这样在排序时,名称和分数都会同时完成)

2) 然后创建新类的arrayList,将两个数组复制到其中

    String[] names = {"Blinky","Inky","Pinky","Clyde"};
    int[] scores = {42,37,67,50};

    List<NameScoreEntity> data = new ArrayList<>(); // your data is now stored here

    for (int i= 0; i < scores.length; i++){
        data.add(new NameScoreEntity(names[i], scores[i]));
    }
    //print unsorted
    System.out.println("Unsorted\n---------");
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }
String[]name={“Blinky”、“Inky”、“Pinky”、“Clyde”};
int[]得分={42,37,67,50};
列表数据=新建ArrayList();//您的数据现在存储在这里
for(int i=0;i
3) 最后,只需使用列表中可用的sort()方法进行排序

    System.out.println("sort by score ascending");
    data.sort(new Comparator<NameScoreEntity>() {
        @Override
        public int compare(NameScoreEntity o1, NameScoreEntity o2) {
            return Integer.compare(o1.score, o2.score); //for descending just swap o1 & o2
        }
    });
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }

    System.out.println("sort by Name ascending");
    data.sort(new Comparator<NameScoreEntity>() {
        @Override
        public int compare(NameScoreEntity o1, NameScoreEntity o2) {
            return o1.name.compareTo(o2.name) ;//for descending just swap o1 & o2
        }
    });
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }
System.out.println(“按分数升序排序”);
data.sort(新的比较器(){
@凌驾
公共整数比较(NameScoreEntity o1、NameScoreEntity o2){
返回整数。比较(o1.score,o2.score);//对于降序,只需交换o1和o2
}
});
for(名称实体e:数据){
系统输出打印ln(e);
}
System.out.println(“按名称升序排序”);
data.sort(新的比较器(){
@凌驾
公共整数比较(NameScoreEntity o1、NameScoreEntity o2){
返回o1.name.compareTo(o2.name);//对于降序,只需交换o1和o2
}
});
for(名称实体e:数据){
系统输出打印ln(e);
}

您是否能够单独对分数进行排序,而不使用名称?如果是这样的话,你的代码需要一些小的改进,如果不是的话,你最好去看看你的书,因为这不是一个容易解释的主题。我可以在没有名字的情况下对它们进行排序。但我不想修改原始数组。你想要什么结果?你应该学习算法。。。你想要的:按分数排序(基本)你还需要什么:分数的索引应该与它的名称对应(就像输入)。你必须这样想:解决方案1:当你排序时,将名称像分数一样移动(手动)解决方案2:让它成为一个具有2个字段名和分数的对象,然后你可以使用任何排序方法,你总是得到你想要的东西。为什么你不想将名称和分数合并到一个实体类中?对一个实体进行排序比对两个单独的数组进行排序要简单得多。使用类,它将更加灵活-您可以按名称或分数、升序或降序排序。
    String[] names = {"Blinky","Inky","Pinky","Clyde"};
    int[] scores = {42,37,67,50};

    List<NameScoreEntity> data = new ArrayList<>(); // your data is now stored here

    for (int i= 0; i < scores.length; i++){
        data.add(new NameScoreEntity(names[i], scores[i]));
    }
    //print unsorted
    System.out.println("Unsorted\n---------");
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }
    System.out.println("sort by score ascending");
    data.sort(new Comparator<NameScoreEntity>() {
        @Override
        public int compare(NameScoreEntity o1, NameScoreEntity o2) {
            return Integer.compare(o1.score, o2.score); //for descending just swap o1 & o2
        }
    });
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }

    System.out.println("sort by Name ascending");
    data.sort(new Comparator<NameScoreEntity>() {
        @Override
        public int compare(NameScoreEntity o1, NameScoreEntity o2) {
            return o1.name.compareTo(o2.name) ;//for descending just swap o1 & o2
        }
    });
    for (NameScoreEntity e : data) {
        System.out.println(e);
    }