首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不丢失索引引用的情况下对数组进行排序?

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

Stack Overflow用户
提问于 2019-05-06 01:49:05
回答 2查看 210关注 0票数 0

好吧。我实际上是一个完全初学者的编码(采取了一些课程,但缓慢/密集的学习者),答案可能是可笑的简单。我有一个有名字的字符串数组,另一个有关联分数的字符串数组。

代码语言:javascript
复制
names[0] = blinky   
scores[0] = 42 (blinky's score)   
names[1] = inky   
scores[1] = 37 (inky's score)  

在for循环中,我调用数字(索引号?我的条件糟透了。唯一有意义的是代码本身)。不管怎么说,我想保护我。

我想列一个列表,把分数从最高到最低的名字排序。

我不知道使用util.Arrays或任何自动排序的方法是否有帮助。我相信我必须手动对它们进行排序,以便保持名称和数字对齐

代码语言:javascript
复制
//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?")  
}

我该怎么做才能把名字排列好呢?越简单越好。我会非常感谢你的帮助。

编辑:我想感谢你们的帮助!:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-06 02:18:12

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

代码语言:javascript
复制
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的新类,将两个变量存储在一起(这样,在排序时,名称和分数都是同时完成的)

代码语言:javascript
复制
public class NameScoreEntity {
    String name;
    int score;

    public NameScoreEntity(String name, int score) {
        this.name = name;
        this.score = score;
    }

    @Override
    public String toString() {
        return name + ", score=" + score;
    }
}

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

代码语言:javascript
复制
    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);
    }

3)最后,您只需使用列表中可用的排序()方法来进行排序。

代码语言:javascript
复制
    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);
    }
票数 0
EN

Stack Overflow用户

发布于 2019-05-06 02:14:45

您应该使用TreeMap,它将始终保持分数之间的顺序,并匹配相应的String

代码语言:javascript
复制
// new TreeMap that sorts from highest to lowest
Map<Integer, String> map = new TreeMap<>(Collections.reverseOrder());

然后,只需使用您已经拥有的循环将所有值putMap中:

代码语言:javascript
复制
for(int i = 0; i < scores.length; i++)
        map.put(scores[i], names[i]);

最后,您只需打印Map

代码语言:javascript
复制
System.out.println(map);

结果:

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55997909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档