是否可以编写一个方法来对特定字段的对象数组进行排序?

时间:2014-10-26 19:16:12

标签: arrays oop sorting object

我的意思是有可能有一个方法,它将一个对象数组作为参数,另一个参数指示我们用来对数组进行排序的对象的哪个字段?

例如,如果对象是联系人,如果我们调用sort(contacts,name),它将根据名称对它们进行排序。如果我们调用sort(联系人,号码),它会根据他们的号码对它们进行排序。 也许通过发送我们想要的字段的字符串!类似的东西:

 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 个答案:

答案 0 :(得分:2)

假设这是Java:是的,这是可能的。您可以使用reflection获取字段类型和值,然后进行比较。这不是一个好主意。使用现有的排序方法Comparator要好得多。

答案 1 :(得分: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] )

在该功能对象中,比较相关字段。如果语言/对象具有反射,您有时可以直接通过字段名称来执行此操作。

由于这种模式非常有用,语言往往会随着它们的成熟而变得更容易。因此,您语言的最新版本可能有一种语法来创建具有少得多的语法的对象,并且使用较少的语法调用它们。