[英]Deep sorting in 2d array
我需要在Java中实现类似于sql sort的功能,其中我有一个函数,其中我将2d数组与2个列索引一起传递,此函数应在提供的列索引上返回已排序的2d数组。
简而言之,我需要在2列上对2d数组进行排序。
我能够在1列上实现排序,PFB的代码相同。
Arrays.sort(arr, new Comparator(){
private int col ;
public int compare(Object o1, Object o2) {
String[] s1 = (String[])o1;
String[] s2 = (String[])o2;
return s1[col].compareTo(s2[col]);
}
private Comparator init(int var){
col = var;
return this;
}
}.init(0)
);
但是我需要增强此功能以基于2d数组中的2列进行排序。 我要求专家对此提供帮助。
输入数组示例
1 2 3 4 1 8 2 8 8 6 10 11 5 6 7 8 1 6 2 6在此先感谢RajuOutput : On sorting with Column 2,3 1 2 3 4 1 6 2 6 5 6 7 8 8 6 10 11 1 8 2 8
当第一列相等时,只需与第二列进行比较,如下所示:
int equal = s1[col].compareTo(s2[col]);
return equal == 0 ? s1[col2].compareTo(s2[col2]) : equal;
另请注意,您正在比较的是字符串(字典比较),而不是数字,因此“ 10”将小于“ 2”,从而导致:
1 2 3 4
8 6 10 11
1 6 2 6
5 6 7 8
1 8 2 8
按第2列和第3列排序时。
如果这不是您想要的,只需将数据转换为整数,然后进行数值比较即可。
您还可以使用Comparator.thenComparing执行相同的操作:
thenComparing(Comparator other)返回带有另一个比较器的字典顺序比较器。
如果此比较器认为两个元素相等,即compare(a,b)== 0,则使用其他元素确定顺序。
Arrays.sort(array,
Comparator.<String[],String>
comparing(row -> row[1])
.thenComparing(row2 -> row2[2])
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.