Android排序数组

我有一个由名称和分数组成的字符串数组。 我想按分数对该数组进行排序。 问题是,考虑到它是一个字符串数组,得分是字符串,导致13,16,2,5,6而不是2,5,6,13,16。 我正在使用此代码:

int spaceIndex; String[][] scoreboard; String[] playername; String[] score; int sbsize; array1.add("Thomas" + ":" + 5); array1.add("Blueb" + ":" + 6); array1.add("James" + ":" + 16); array1.add("Hleb" + ":" + 13); array1.add("Sabbat" + ":" + 2); sbsize = array1.size(); scoreboard = new String[sbsize][2]; playername = new String[sbsize]; score = new String[sbsize]; pos2 = new int[sbsize]; for (int i=0; i<array1.size(); i++) { spaceIndex = array1.get(i).indexOf(':'); scoreboard[i][0] = array1.get(i).substring(0, spaceIndex); scoreboard[i][1] = array1.get(i).substring(spaceIndex+1, array1.get(i).length()); } Arrays.sort(scoreboard, new Comparator() { @Override public int compare(String[] entry1, String[] entry2) { String time1 = entry1[1]; String time2 = entry2[1]; return time1.compareTo(time2); } }); 

解决办法是什么?

将它们转换为int。 我记得,像……

 Arrays.sort(scoreboard, new Comparator() { @Override public int compare(String[] entry1, String[] entry2) { Integer time1 = Integer.valueOf(entry1[1]); Integer time2 = Integer.valueOf(entry2[1]); return time1.compareTo(time2); } }); 

您还可以创建简单的值对象类,以便于操作。 喜欢…

 class Player { public String name; public int score; } 

之后你可以做

  Player[] scoreboard = ... Arrays.sort(scoreboard, new Comparator() { @Override public int compare(Player player1, Player player2) { if(player1.score > player2.score) return 1; else if(player1.score < player2.score) return -1; else return 0; } }); 

编辑:我建议您了解基本的OOP原则,这将在一开始就帮助您。

编辑2: Java 8(带有function接口和lambda):

 Arrays.sort(scoreboard, (player1, player2) -> { Integer time1 = Integer.valueOf(player1[1]); Integer time2 = Integer.valueOf(player2[1]); return time1.compareTo(time2); }); 

这是排序字符串数组的简单方法:
Arrays.sort(mystringarray);

使用

 java.util.Arrays.sort(yourArray, new Comparator() { @Override public int compare(String object1, String object2) { return Integer.valueOf(object1).compareTo(Integer.valueOf(object2)); } }); 

比较器会将您的字符串作为整数进行比较。

 ArrayList names= new ArrayList(); names.add("sathish"); names.add("Ravi"); names.add("Praksh"); names.add("pavithara"); names.add("Duraga"); names.add("uma"); names.add("Upendar"); System.out.println("Before sorting"); System.out.println("Names : "+names); Collections.sort(names, new Comparator() { @Override public int compare(String lhs, String rhs) { return lhs.compareToIgnoreCase(rhs);//Ascending order. //return (lhs.compareToIgnoreCase(rhs)*(-1));//Descending order. } }); System.out.println("After sorting"); System.out.println("Names : "+names); 

输出:排序前

姓名:[sathish,Ravi,Praksh,pavithara,Duraga,uma,Upendar]

排序后

姓名:[Duraga,pavithara,Praksh,Ravi,sathish,uma,Upendar]

如果可能,请使用更好的数据结构来解决您的问题,使用HashMap,使用名称来评分映射,并使用值对hashmap进行排序。
如果你想按照你的描述使用arraylist,在排序之前,将它们转换为整数和排序,然后再转换为字符串。

你可能最好将名称+结果存储在对象中,然后将它们存储在ArrayList中。 然后,您可以使用自定义比较器轻松排序,请参阅链接以获取一个简单示例: http : //www.javabeat.net/tips/20-sorting-custom-types-in-java.html

分数应该是一类

 public class HighScore Comparable { private String name; private int score; public Score( String name, int score ) { this.name = name; this.score = score; }//cons //getters public String getName() { return name; }//met public int getScore() { return score; }//met @Override public int compareTo( HighScrore b ) { int diffScore = score - b.score; if( diffScore != 0) return diffScore; else return name.compareTo( b.name ); }//met public boolean equals( Object o ) { if( !(o instanceof HighScore)) return false; HighScore b = (HighScore) o; return score == b.score && name.equals( b.name ); }//met }//class 

然后你可以建立得分对象,

 String[] stringParts[]; List listHighScore = new ArrayList(); for (int i=0; i 

把它们放在一个列表中并对它们进行排序

 Collections.sort( list ); 

此致,Stéphane

您可以使用ArrayList而不是Array

请检查此链接