1

请...帮我把这个数组中的值分组

我有一个这样的数组

    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 的每个项目都具有数组中的分组值。

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

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

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

4

2 回答 2

2

备用:

二维数组:

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

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

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

于 2012-12-13T20:56:05.117 回答
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,"
于 2012-12-06T05:42:25.887 回答