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
。
请检查此链接