2011-06-03 32 views
4

我有一個字符串數組組成的名稱和分數。我想按分數排序該數組。問題是,考慮到它是一個字符串數組,分數是字符串,導致13,16,2,5,6而不是2,5,6,13,16。我使用這個代碼:Android排序數組

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<String[]>() { 
@Override 
public int compare(String[] entry1, String[] entry2) { 
    String time1 = entry1[1]; 
    String time2 = entry2[1]; 
    return time1.compareTo(time2); 
    } 
}); 

什麼是解決方案?

+0

如果這是分數,爲什麼不把它存儲在整數? OK,即使不是以整數存儲,也可以將其轉換爲整數並進行比較。 – xandy 2011-06-03 09:01:32

+0

需要的網址排序阿里http://www.mkyong.com/java/how-to-sort-an-array-in-java/ – 2015-08-05 07:26:12

回答

15

將它們轉換爲int。我記得,像...

Arrays.sort(scoreboard, new Comparator<String[]>() { 
    @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<Player>() { 
      @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(與功能接口和一個lambda):

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

謝謝,我正是想要這個! – erdomester 2011-06-03 11:31:30

3

使用

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

比較器將你的字符串比較爲整數。

+1

答案是轉換爲數字排序爲數字 - 如果不是你正在排序詞彙順序如果你把它們保存爲字符串+1 – 2011-06-03 10:58:38

0

如果您的問題可能使用更好的數據結構,使用HashMap的,名稱爲得分的映射,並整理到散與價值。
如果您想按照您所描述的arraylist進行排序,請在排序之前將它們轉換爲整數並進行排序,然後返回到字符串。

0

分數應該像

public class HighScore Comparable<HighScore> 
{ 
    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<HighScore> listHighScore = new ArrayList<HighScore>(); 
for (int i=0; i<array1.size(); i++) 
{ 
    stringParts = array1.get(i).split(':'); 
    listHighScore.add(new HighScore(stringParts[ 0 ], Integer.parseInt(stringParts[ 1 ]))); 

}//for 

把它們放在一個列表,並通過

Collections.sort(list); 

問候排序, Stéphane

3

這是排序字符串數組的簡單方法:
Arrays。排序(mystringarray);

1
ArrayList<String> names= new ArrayList<String>(); 
    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<String>() { 

     @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所在,拉維,Praksh,pavithara,Duraga,UMA,Upendar]

排序

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