Ruby中如何对多维数组排序

Python012

Ruby中如何对多维数组排序,第1张

先解释一下 data是数组 sort是数组类型自带的一个排序函数,函数的参数是一个函数(也就是方法) 然后先看createComparisonFunction函数 这个函数返回了一个方法 其方法参数在返回方法内用到,符合了执行作用域的条件,形成闭包

数组是

array = [[1],[2],[3],[0],[1,2],[1,0],[0,1]]

希望排序整个数组,先按照数组 元素个数 ,如果个数相同再 按照首个元素大小

array.sort_by {|a| [a.size, a[0]] }

#include

#include

#define M 3

#define N 3

//输出二维数组的函数

void print(int a[][N])

{

int i,j

for(i=0i<Mi++)

{

for(j=0j<Nj++)

{

printf("%d ",a[i][j])

}

printf("\n")

}

}

//qsort的cmp函数

int cmp(const void*a, const void *b)

{

return *(int*)a-*(int*)b

}

int main(int argc, char* argv)

{

int a[M][N]={3,2,1,9,8,7,6,5,4}

printf("按列排序前的二维数组是:\n")

print(a)

printf("\n")

int j

for(j=0j<Nj++)//对每一列进行升序排序

{

//对第j列进行排序

int m,n

int t

for(m=M-1m>0m--)

{

for(n=0n<mn++)

{

if(a[n][j]>a[n+1][j])

{

t=a[n][j]

a[n][j]=a[n+1][j]

a[n+1][j]=t

}

}

}

}

printf("按列排序后二维数组变为:\n")

print(a)

printf("\n")

//对按列排序后的二维数组按行升序排序 (调用快速排序函数)

int i

for(i=0i<Mi++)

{

qsort(a[i],N,sizeof(a[i][0]),cmp)

}

printf("按列排序后再按行排序后二维数组变为:\n")

print(a)

printf("\n")

system("pause")

return 0

}

这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。