Matrix APLX:按第二列对混合数据矩阵进行排序

Matrix APLX:按第二列对混合数据矩阵进行排序,matrix,multidimensional-array,apl,Matrix,Multidimensional Array,Apl,我在APLX工作,我需要按第二列排序一个两列矩阵(总是两列)。由于这个问题,第一列包含7个字母数字字符集的行。但是,第二列包含每行字母数字代码的权重或“分数”。例如 4ST7SM4 34 XXW1X2X 340000 599E5EE 1516 应该按右边的数字排序,这样看起来 XXW1X2X 340000 599E5EE 1516 4ST7SM4 34 所以总是按降序排列。我已经使用了rank down函数,但正如预期的那样,我得到了一个值错误,因为第一列是字母数字。

我在APLX工作,我需要按第二列排序一个两列矩阵(总是两列)。由于这个问题,第一列包含7个字母数字字符集的行。但是,第二列包含每行字母数字代码的权重或“分数”。例如

4ST7SM4     34
XXW1X2X 340000
599E5EE   1516
应该按右边的数字排序,这样看起来

XXW1X2X 340000
599E5EE   1516
4ST7SM4     34

所以总是按降序排列。我已经使用了rank down函数,但正如预期的那样,我得到了一个值错误,因为第一列是字母数字。我尝试过交换列并将它们交换回来,但仍然不起作用,这意味着它会抛出相同的错误。我可以把它们分开,把数字排下来,但我需要字母数字板来重新排序。我不知道该怎么做。

首先,您必须对单个第二列进行分级,然后对整个矩阵重新排序。注意索引原点为零,如果使用1,请将括号内的1替换为2:

      m←3 2⍴'4ST7SM4' 34  'XXW1X2X' 34000 '599E5EE' 1516
      m
 4ST7SM4     34
 XXW1X2X  34000
 599E5EE   1516
      ⍒m[;1]
1 2 0
      m[1 2 0;]
 XXW1X2X  34000
 599E5EE   1516
 4ST7SM4     34
一气呵成:

      m[⍋m[;1];]
 4ST7SM4     34
 599E5EE   1516
 XXW1X2X  34000

一开始,有升级和降级。这些仅在数值向量上定义

然后,将升级和降级扩展为对字符和矩阵数据进行操作。在I.P.Sharp,这发生在1980年左右。很可能其他公司(IBM、STSC)也在那时做了同样的事情

然而,在当时,字符等级需要一个左参数,即排序序列。通常,[]AV已经足够好了,但是如果您想对大小写字母进行排序,您可能必须使用

'aAbBcCdD...zZ0123456789 ' gradeUp mat
这可能是APLX中出现值错误的原因。它们的字符级实现可能需要一个左参数。假设示例矩阵的第二列是character,请使用[]AV再次尝试示例,即

m[ []av gradeUp disclose m[;2] ; ]