在集算器中,使用psort,sort,rank,ranks等函数将数据排序或排名,下面我们首先来看如何将序列中的数据排序,或者计算成员的排名:
|
A |
1 |
[8,1,2,7,0,5,3] |
2 |
=A1.sort() |
3 |
=A1.psort() |
4 |
=A1.ranks() |
5 |
=A1.rank(5.5) |
A2~A5根据A1中的序列来计算排序或排名。A2和A3的结果如下:
其中,A2计算序列中成员升序排序后的结果。A3中计算的是升序排序后的结果中,每个位置的成员在原序列中的序号。如最小的0,在原序列中的序号是5;最大的8,在原序列中的序号是1。实际上A2中的表达式,和 =A1(A1.psort()) 的结果是相同的。因此,在数据计算中,psort函数可以用来生成索引数列。
A4和A5中的结果如下:
其中,A4获得的结果,是原序列中每个成员从小到大的名次。A5中计算的是5.5和A1中序列的各个成员比较,能排到的名次。
当排名结果中有可能出现并列时,可以用@i和@s选项调整rank函数的排序结果,如:
|
A |
B |
1 |
[2,1,2,3,4,4,5] |
|
2 |
=A1.ranks() |
|
3 |
=A1.ranks@i() |
=A1.rank@i(3.8) |
4 |
=A1.ranks@s() |
=A1.rank@s(2) |
A2中是默认情况下的排名,A3中添加了@i选项,A4中添加了@s选项,A2,A3和A4中的结果如下:
默认情况下,并列的名次会占位,使得后续的排名顺延,如出现两个第2名后,下一个就是第4名了。添加了@i选项时,会忽略并列名次的影响,无论有多少个并列第2名,下一个始终是第3名。添加了@s选项后,当出现并列排名时,会计算出排名的平均值作为并列名次,使得名次更能体现其实际位置。如两个并列第2名,他们实际占据了第2,3名的两个位置,因此认为他们的实际名次都是均值2.5。
与ranks类似,添加@i和@s选项后,rank函数的计算也会有所不同。B3和B4中的结果如下:
特别的是,在计算A.rank@s(y) 时,如果y在A中已经存在,会直接返回A中对应值的排名,而不会用再把y加入到A中计算排名均值。
在实际运算中,直接使用常数序列排序的情况很少,通常需要排列的序列都是由计算获得。如:
|
A |
B |
C |
1 |
=demo.query("select * from EMPLOYEE where EID<6") |
|
|
2 |
=A1.(NAME+" "+SURNAME) |
=A2.sort() |
=A2.ranks() |
3 |
=A1.(BIRTHDAY) |
=A3.sort() |
=A3.ranks() |
4 |
=A1.(age(BIRTHDAY)) |
=A4.sort@z() |
=A4.ranks@z() |
为了更容易比较结果,A1中仅取出了前5条员工数据用于计算。A2计算出员工的全名并在B2中排序,在C2中计算各位员工的全名排名,A2,B2和C2中结果如下:
可以发现,在将字符串排序时,是按照字母顺序来排列的。实际上,在处理字符串的排序和排名时,是根据每个字符的ASCII码来比较的。
A3中求出员工的生日,并在B3中排序,C3中则计算生日的排名。A3,B3和C3中的结果如下:
可以看到,日期数据的排序,就是以时间顺序处理的。需要注意的是,集算器中可以点击Tool>Option,在Option窗口的Environment页中设定日期格式。而日期或者日期时间类型的数据,排序或者计算排名的结果是和格式无关的。
A4中计算出员工的年龄。在B4中将年龄排序时,添加了@z选项,表示排序时降序排序;类似的,在C4中计算每个年龄的排名时,添加了@z选项,表示排名时从大到小。类似的,psort函数和rank函数同样可以使用@z选项。A4,B4和C4中结果如下:
需要注意的是,添加了@z选项后,sort函数和rank函数的比较顺序也是相反的。另外,值得注意的是,在年龄数据中出现了相等的数据。从排序结果中可以看到,两个42的排名都是2,而排在它们下一位的37的排名变成了4。这说明,在默认情况下,并列的排名会占去相应的位置。我们将在第3节继续关于排名计算的研究。
在字符串排序时,是按照每个字符的ASCII码处理的,但是这种方式在遇到非英语的文字时,排序就有可能出现错误。在这种情况下,需要使用A.sort(…;loc),添加语言参数loc,如:
|
A |
1 |
[Íker,Álvaro,Estela,Alba,César,Sancho] |
2 |
=A1.sort() |
3 |
=A1.sort(;"esp") |
A1的序列中是几个西班牙语名字,在A2和A3中分别对它们排序,所不同的是A3在排序时指定了语言参数"esp",即使用西班牙语。A1,A2和A3中的数据如下:
从结果中可以看到,指定语言参数后,可以获得正确的排序结果。
集算器能支持的语言和字符集可以从参考文档中查阅。