分组数组

时间:2012-12-05 15:41:57

标签: arrays pseudocode mumps

请帮助我对这个数组中的值进行分组

我有一个像这样的数组

    Arr(0) = 5
    Arr(1) = ATC^1
    Arr(2) = BTC^2
    Arr(3) = ATC^3
    Arr(4) = CTC^4
    Arr(5) = BTC^5

我想要的最终结果是将Arr(0)更改为3,这是组中唯一TC的数量。 ATC,BTC和CTC。我希望1,2和3中的每个项都具有Array中的分组值。

    Arr(0) = 3
    Arr(1) = ATC:1,3
    Arr(2) = BTC:2,5
    Arr(3) = CTC:4

我正在尝试在MUMP中执行此操作,因此我没有内置的排序/组功能。

即使是伪代码也会有所帮助。

2 个答案:

答案 0 :(得分:2)

在MUMPS中,您不需要排序函数,因为数组下标正在自动排序。

所以最简单的方法是创建另一个数组,其中排序维度是第一个数据和值 - 第二个数据:

for i=1:1:Arr(0) set piece1=$piece(Arr(i),"^",1), piece2=$piece(Arr(i),"^",2), Temp(piece1)=$get(Temp(piece1))_piece2_","

运行该代码后,您将获得以下数组

Temp("ATC")="1,3,"
Temp("BTC")="2,5,"
Temp("CTC")="4,"

然后你遍历那个数组并构建一个你需要的数组:

set i="",Brr=0 for  set i=$o(Temp(i)) quit:i=""  set Brr=Brr+1,Brr(Brr)=i_":"_Temp(i)

您将获得所需的阵列:

Brr(1)="ATC:1,3,"
Brr(2)="BTC:2,5,"
Brr(3)="CTC:4,"

答案 1 :(得分:2)

替代:

二维数组:

Temp("ATC",1)=""
Temp("ATC",3)=""
Temp("BTC",2)=""
Temp("BTC",5)=""
Temp("CTC",4)=""

$o循环可以按排序顺序查看项目的第一级,然后查看嵌套$o以运行第二级。或者,如果您只想要排序列表,那么就是第一个。如果您要从列表中有选择地删除元素并让您在数组中设置和终止注释,这将保存字符串逻辑。

排序逻辑对MUMPS来说并不常见,数据通常被加载/存储到数组中,这样可以使它们保持排序顺序。