ruby如何获得排序的序号argsort

Python020

ruby如何获得排序的序号argsort,第1张

以后有问题可以去 stackoverflow上面搜。这里有个 提问,与你的类似。

xs = [1, 3, 2, 4]

original_indexes = xs.map.with_index.sort.map(&:last)

#=> [0, 2, 1, 3]

我解释下:

1)with_index  之后产生一个 二维数组的迭代器 [ [xs[0], 0], [xs[1], 1], [xs[2], 2] ... ]

2)sort 函数应用在二维数组中时,似乎是按照第一个元素进行排序

3)排序之后的二维数组,取出每个数组的last就是索引值,由于这时候已经排过序,所以就是希望的答案了。

#include"stdio.h"#define P 10void inputmessage(int student[][4]){int i<br>for(i=0i<Pi++)<br> scanf("%d,%d,%d,%d",&student[i][0],&student[i][1],&student[i][2],&student[i][3])</p><p>}void outputhighscore(int student[][4]){int i,j,max,snofor(j=1j<4j++) {max=student[0][j]<br>sno=student[0][1]<br>for(i=0i<Pi++)<br> {<br> if(student[i][j]>max)<br> {max=student[i][j]<br>sno=student[i][0]<br> } } printf("\n第%d门课程最高的学生学号为:%d,成绩为:%d\n",j,sno,max)} }void outputhighavg(int student[][4]){int i,j,p<br>float max<br>float avg[P]={0}for(i=0i<Pi++) { for(j=1j<4j++) { avg[i]+=student[i][j] } avg[i]=avg[i]/3} max=avg[0]p=0for(i=0i<pi++) if(avg[i]>max){max=avg[i]p=i} printf("最高平均分为:%d %f",student[p][0],max) }void main(){int student[P][4]printf("输入学号,成绩1,成绩2,成绩3:\n")inputmessage(student)outputhighscore(student)outputhighavg(student)}