2016-10-17 182 views
-1

你好,我有2個字符串數組排序字符串數組

private String names[] = { 
    "Drinks", 
    "Bikes", 
    "Cars"}; 

private String desc[] = { 
    "this is drinks package", 
    "package for bikes", 
    "package cars"}; 

// now i used 
Arrays.sort(names); 

現在的名稱是正確的A - Z順序,我該怎麼樣「降序」排列依據「名稱「數組?例如後分類數組「名字」的結果:

Bikes,Cars,Drinks 

現在我想的遞減排列格式相同的方式,使適當的正確的「姓名」,「說明」的謊言。結果應該是這樣的:

names = "Bikes,Cars,Drinks" 
desc = "package for bikes","package cars,this is drinks package" 

我們可以這樣做嗎?

的標記是重複的,這是不重複反正

+1

的可能的複製(http://stackoverflow.com/questions/1694751/java-array-sort-descending) – ChrisStillwell

+0

包該車將前[Java數組降序排列?]自行車包。如果你想要做一些像string-string這樣的事情,可以使用二維數組或KeyValuePair –

+0

抱歉,你錯了,它不是重複的,我不想排序desc。但基於陣列1 – AndroidGuy007

回答

1

爲什麼不使用類?

Object-Oriented Principles一樣,當您有與特定主題相關的數據時,將它們放在同一個班級中。

實施例:

NameDescription類實施Comparable interface

public class NameDescription implements Comparable<NameDescription> { 
    private String name; 
    private String description; 

    public NameDescription(String name, String description) { 
     this.name = name; 
     this.description = description; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getDescription() { 
     return description; 
    } 
    public void setDescription(String description) { 
     this.description = description; 
    } 

    @Override 
    public int compareTo(NameDescription o) { 
     return name.compareTo(o.getName()); 
    } 
} 

可比接口提供compareTo方法,使你能夠限定比較公式到當前對象與另一個比較(它們甚至不需要是相同的類型)。 Arrays.sort方法使用compareTo方法對元素進行排序,這樣您可以將數據放在一起,任何排序方法都會根據compareTo方法爲您提供一致的結果。

分揀機類:

public class Sorter { 

    public static void main(String[] args) { 
     NameDescription namesDescriptions[] = { 
       new NameDescription("Drinks", "this is drinks package"), 
       new NameDescription("Bikes", "package for bikes"), 
       new NameDescription("Cars", "package cars"), 
      }; 

     Arrays.sort(namesDescriptions); 

     // ASCENDING 
     for(int i=0; i<namesDescriptions.length; i++) { 
      System.out.println(namesDescriptions[i].getName()); 
     } 
     for(int i=0; i<namesDescriptions.length; i++) { 
      System.out.println(namesDescriptions[i].getDescription()); 
     } 

     System.out.println("---------"); 

     // DESCENDING 
     for(int i=namesDescriptions.length-1; i>=0; i--) { 
      System.out.println(namesDescriptions[i].getName()); 
     } 
     for(int i=namesDescriptions.length-1; i>=0; i--) { 
      System.out.println(namesDescriptions[i].getDescription()); 
     } 

     // To save them in separate arrays 
     String[] names = new String[namesDescriptions.length]; 
     String[] desc = new String[namesDescriptions.length]; 
     String[] imageid = new String[namesDescriptions.length]; 
     for(int i=0; i<namesDescriptions.length; i++) { 
      names[i] = namesDescriptions[namesDescriptions.length-i-1].getName(); 
      desc[i] = namesDescriptions[namesDescriptions.length-i-1].getDescription(); 
      imageid[i] = namesDescriptions[namesDescriptions.length-i-1].getimg(); 
     } 
    } 

} 
+0

感謝,如預期的那樣工作,我只是用listview修改,標記爲答案 – AndroidGuy007

+0

謝謝!我剛剛更新了它的工作方式。 :) –

+0

你好,我有問題,我們可以使用循環的東西是這樣的(int i = 0;我 AndroidGuy007

1

你的目標是一個關鍵(名稱陣列)鏈接到一個值(DESCR陣列)下降的。

您可以通過兩種方式實現它:

使用二維數組:

String[][] myItems = new String[][] { 
    {"Drinks", "This is drink package"}, 
    {"Cars", "package cars"}, 
    {"Bikes", "package for bikes"}, 
    ... 
}; 

現在你可以對它進行排序following this example或任何其他別的

使用AbstractMap.SimpleEntry

有了這個您只需創建一個AbstractMap.SimpleEntry<String, String>的一維數組並訂購它。您可以按照我爲此目標鏈接的文檔。

希望這有助於

注意

如果在兩個陣列之間沒有邏輯,你不能將它們鏈接。在你的例子中,它可以通過在第二個數組中搜索第一個數組的關鍵字來完成,但由於你沒有提到desc數組的任何「必須有」,我們必須假設「kid」條目可以被鏈接到「baby package」descr,所以你不能通過搜索「kid」找到它。希望我以體面的方式解釋

+0

這不工作,但我的自定義列表視圖弄亂了原因是,我已經在佈局,一個標題和一個描述現在當我發送這個CustomList customList = new CustomList(這個,名字,desc);以及稍後的文本是通過這種方式設置textViewName.setText(names [position]); textViewDesc.setText(desc [position]);並且這會讓任何簡單的方法變得混亂,例如,如果我們可以在排序第一個數組的同時獲得計數位置,並使用相同的計數來排序第二個數組? – AndroidGuy007