2014-10-26 49 views
0

我的意思是有可能有一個方法,獲取作爲其參數的對象數組和另一個參數,它指示我們用於排序數組的對象的哪個字段?是否可以編寫一個方法來針對特定字段對對象數組進行排序?

例如,如果對象是聯繫人,如果我們調用排序(聯繫人,名稱),它會按照名稱對它們進行排序。如果我們調用排序(聯繫人,號碼),則根據他們的號碼對它們進行排序。 也許通過發送我們想要的字段的字符串!是這樣的:

class sorting { 
 
    
 
    public static bubble_sort(Object[] array , String field){ 
 
     
 
    for(int i =0; i<array.length ; i++){ 
 
     
 
     if(array[i].field > array[i+1].field) 
 
     swap(array ,i ,i+1); 
 
     
 
    } 
 
}

(最好在Java)(!和請包括你給的解決方案的例子)

+2

答案很大程度上取決於語言。你能更精確地談論你正在談論哪種語言?看起來你想要Java的答案。 – 2014-10-26 19:18:29

回答

2

假設這就是Java:是的,這是可能的。您可以使用reflection來獲取字段類型和值,然後比較它們。這不是一個好主意。現有排序方法使用Comparator更好。

2

幾乎適用於任何語言的方法是傳入某種函數對象。

class sorting { 
    public static bubble_sort(Object[] array, FunctionObject ordering) { 
    for(int i =0; i<array.length ; i++){ 
    if(ordering(array[i+1], array[i])) 
     swap(array ,i ,i+1); 
    } 
}; 

不同的語言將會有這樣一個函數對象不同的語法 - 它的類型是什麼,等等 - 但幾乎每一種語言都將有一些方法來做到這一點。

一般來說,它的最佳簽名是採用兩個不同對象的簽名,並且如果左邊的一個不到正確的對象,則返回true。

同樣,不同的語言將有不同的調用函數對象的方法。有些可能需要ordering.Invoke(array[i+1], array[i])

在該函數對象中,比較相關字段。如果語言/對象有反射,您可以直接通過字段名稱進行操作。

由於這種模式非常有用,所以語言在成熟時會使它更容易。因此,最新版本的語言可能會有一種語法來創建語法較少的對象,並以較少的語法來調用它們。

相關問題