我的意思是有可能有一个方法,它将一个对象数组作为参数,另一个参数指示我们用来对数组进行排序的对象的哪个字段?
例如,如果对象是联系人,如果我们调用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中)(并且请包含您提供的解决方案的示例!)
答案 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] )
。
在该功能对象中,比较相关字段。如果语言/对象具有反射,您有时可以直接通过字段名称来执行此操作。
由于这种模式非常有用,语言往往会随着它们的成熟而变得更容易。因此,您语言的最新版本可能有一种语法来创建具有少得多的语法的对象,并且使用较少的语法调用它们。