通过对数组进行排序创建排名列表
问题描述:
我有两个数组,其中一个数组代表一个名称集合,另一个描述它们的关联标记。我想按升序对数组中的标记进行排序,然后还将各个名称与商标有关。通过对数组进行排序创建排名列表
我的目标是创建一个排名列表。我正在使用Processing来做到这一点
float sum = 0;
String [] name = {"A", "B", "C", "D","E"};
float [] mark = {12, 2, 4, 6, 23};
void setup() {
size(600, 600);
smooth();
}
void draw() {
background(225);
fill(0);
println(name.length);
for (int i =0; i<name.length; i++) {
text(name[i] + ":"+ mark[i], 100, 100+i*50);
}
}
/////// i wanted to sort it as E:23, A:12, D:6, C:4, B:2
如果有人能帮助我,这将是非常好的。 :)
提前许多感谢, 优素福
答
可以使数据holder类实现Comparable
。我认为你也可以使用Map,就像一个hashMap。
这里数据holder类例如:
import java.util.Collections;
ArrayList <Data> d = new ArrayList<Data>();
void setup() {
size(600, 600);
d.add(new Data("A", 12));
d.add(new Data("B", 2));
d.add(new Data("C", 4));
d.add(new Data("D", 6));
d.add(new Data("E", 23));
println("before sorting:\n" + d);
//used reverseOrder as it goes decrescent, but you could just reverse
//the "natural" order in the class it self. Exchange -1 and 1 in compareTo()
// and use Collections.sort(d); here
Collections.sort(d, Collections.reverseOrder());
println("after sorting:\n" + d);
}
/////// i wanted to sort it as E:23, A:12, D:6, C:4, B:2
class Data implements Comparable {
String name;
int mark;
Data(String _n, int _m) {
name = _n;
mark = _m;
}
// this sets the 'natural' order of Data
@Override
int compareTo(Object o) {
Data other = (Data) o;
if (other.mark > mark) {
return -1;
} else if (other.mark < mark) {
return 1;
}
return 0;
}
// this to get a nice looking output in console...
@Override
String toString() {
return name + ":" + nf(mark, 2);
}
}
+0
非常感谢@ v.k。代码运行良好。我现在必须开始了解地图:) –
+0
还有[intDict](https://processing.org/reference/IntDict.html),您可以尝试 –
你能在代码中指定的语言吗?看起来像C,但要确定...另外,您使用的各种功能看起来都来自库 - 可能是Processing库? –
Hi @MichaelDorgan我正在使用基于Java的处理程序 –
为什么你使用两个“数组”? [地图](http://docs.oracle.com/javase/7/docs/api/java/util/Map.html)将是一个更好的选择 – sam