2011-11-18 54 views
1

我想根據自己的數字values.For兩個數組進行排序例如排序兩個或更多陣列在JAVA

apple[] = [apples, green, 9180, 16.19]; 
orange[] = [oranges, orange color, 9180, 25.18]; 

我想根據陣列中的第三值即16.19

排序它

我該怎麼辦?

注數組聲明僅是爲了說明的目的。

結果必須是這樣的:

String[] apples =  [apples, green, 9180, 16.19]; 
String[] oranges = [oranges, orange color, 9180, 25.18]; 
String[] grapes =  [grapes, green, 9180, 35.16] 
String[] strawberry = [strawberries, red, 9180, 45.36] 

每一行是一個單個單獨的數組。它必須按升序根據即16.19,25.18的最後一個數字進行排序,35.16

該陣列具有四個字段[蘋果,綠色,9180,16.19];蘋果:水果的名字;綠色:水果的顏色; 9180:農場的密碼; 16.19:水果產量。我必須根據水果的產量來分類。希望我清楚。

+7

我有困難的瞭解你想要什麼。你能給出你的例子的結果(排序後)的例子嗎? –

+0

你有沒有把你的'apple'和'orange'作爲另一個數組中的元素? – Vlad

+0

你的意思是你想排序不是數組的內容,而是數組本身?也不真正理解這個問題...... –

回答

4

我讓自己不要有一個名爲oranges,​​,strawberriesgrapes四個變量的假設。如果這樣做,在排序之前將它們放入數組中。

實施例的代碼進行排序的Comparable小號數組的數組:

class a{ 

    public static void main(String[]args){ 

     final int column = 3; 
     Comparable[][] a = new Comparable[][]{ 
      {"oranges", "orange color", 9180, 25.18}, 
      {"apples", "green", 9180, 16.19}, 
      {"strawberries", "red", 9180, 45.36}, 
      {"grapes", "green", 9180, 35.16} 
     }; 

     java.util.Arrays.sort(a, 
      new java.util.Comparator<Comparable[]>(){ 
       public int compare(Comparable[]a,Comparable[]b){ 
        return a[column].compareTo(b[column]); 
       } 
     }); 

     for (Comparable[] c : a) 
      System.out.println(java.util.Arrays.toString(c)); 

    } 

} 

輸出:

[apples, green, 9180, 16.19] 
[oranges, orange color, 9180, 25.18] 
[grapes, green, 9180, 35.16] 
[strawberries, red, 9180, 45.36] 

如果你想要的東西更通用的,則可以定義一個數組比較這需要比較列作爲其構造函數中的參數(參見updated example):

class ArrayComparator implements java.util.Comparator<Comparable[]>{ 
    private int col; 
    public ArrayComparator(int col){ 
     this.col = col; 
    } 
    public int compare(Comparable[] o1, Comparable[] o2){ 
     return o1[col].compareTo(o2[col]); 
    } 
}; 
0

試試這個功能

apple[] = [apples, green, 9180, 16.19]; 
orange[] = [oranges, orange color, 9180, 25.18]; 

Arrays.sort(apple); 
Arrays.sort(orange); 

看這裏 - how to sort an array

4

您可以在將實施Comparable接口的類封裝的陣列。這將使您能夠使用任何您想要的比較策略。解釋後

1

更新:
我假設你存儲這些數組列表或另一陣列。這這種情況下,你可以使用Collections.sort()Arrays.sort()。由於sort()只能對元素可以相互比較的數組進行排序,所以必須實現一個Comparator<Object[]>,它比較數組的最後一個元素並將其傳遞給sort方法。 Example on comparator

+0

大衛陣列有四個領域[蘋果,綠色,9180,16.19];蘋果:水果的名字;綠色:水果的顏色; 9180:農場的密碼; 16.19:水果產量。我必須根據水果來分類。希望我清楚。 – Vinoth

+0

好的,謝謝,我已經更新了我的答案 – zeller

1

我們創建了一個類來實現comparator interface並比較傳遞給構造函數的列的1D數組元素。現在,我們可以通過這個類的一個實例的Arrays.sort function,和2D陣列將上排序所需的列。
看看這個.. sorting

0

問題是:

爲什麼你甚至用屬性封裝你的Items作爲數組?我更喜歡封裝一個類,稱爲「水果」。在這個類中你可以實現可比較接口或者編寫一個單獨的比較器。

之後,你,你就要有這樣的事情:

LinkedList<Fruits> myFruits; 
Collections.sort(myFruits); 

// Optional with passed Comparator, myComparator has to implement Comparator 
Collections.sort(myFruits, myComparator)