我想根据它们的数值对两个数组进行排序。例如
apple[] = [apples, green, 9180, 16.19];
orange[] = [oranges, orange color, 9180, 25.18];
我想根据数组中的第3个值进行排序,即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
该数组有四个字段[apples,green,9180,16.19];苹果:水果的名称;绿色:水果的颜色; 9180:农场的密码; 16.19:水果产量。我必须根据水果的产量来分类。希望我很清楚。
答案 0 :(得分:4)
您可以将数组封装在将实现Comparable接口的类中。这将使您能够使用您想要的任何比较策略。
答案 1 :(得分:4)
我允许自己假设您没有名为oranges
,apples
,strawberries
和grapes
的四个变量。如果这样做,请在排序之前将它们放在数组中。
对Comparable
s:
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]);
}
};
答案 2 :(得分:1)
解释后更新:
我假设您将这些数组存储在列表或其他数组中。在这种情况下,您可以使用Collections.sort()
或Arrays.sort()
。由于sort()
只能对其元素具有可比性的数组进行排序,因此必须实现Comparator<Object[]>
来比较数组的最后元素并将其传递给sort方法。 Example on comparator
答案 3 :(得分:1)
我们创建一个实现comparator interface
的类,并比较传递给构造函数的列上的1D数组元素。现在,我们可以将此类的实例传递给Arrays.sort function
,2D数组将在所需的列上排序。
看看这个.. sorting
答案 4 :(得分: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。
答案 5 :(得分:0)
问题是:
为什么甚至将属性封装为数组?我更喜欢用于封装的类,称为“Fruits”。在本课程中,您可以实现Comparable Interface或编写单独的Comparator。
之后,你会有这样的事情:
LinkedList<Fruits> myFruits;
Collections.sort(myFruits);
// Optional with passed Comparator, myComparator has to implement Comparator
Collections.sort(myFruits, myComparator)