PAGE TOP

index
ソート

項目 サンプル
キー列を昇順にソートしたい
C1C2
13
23
34
410
57
61
76
84
92
106
   =>   
C1C2
61
92
13
23
84
34
106
76
57
410
キー列を降順にソートしたい
C1C2
13
23
34
410
57
61
76
84
92
106
   =>   
C1C2
410
57
106
76
84
34
13
23
92
61
ソート列を使わずに逆順にソートしたい
C1
1
2
3
4
5
6
7
8
9
10
   =>   
C1
10
9
8
7
6
5
4
3
2
1

キー列を昇順にソートしたい

[結果]
C1C2
13
23
34
410
57
61
76
84
92
106
   =>   
C1C2
61
92
13
23
84
34
106
76
57
410
[VAPScript]
N = 10;
vmin = 1;
vmax = 10;
c1("C1") = {vmin:vmin+N-1};
c2("C2") = runif(N,vmin,vmax+1);
table = cbind(c1,c2);
//
keyCol = "C2";
sortOrder = 0; // 0:asc / 1:desc
result = sort(table,keyCol,sortOrder);
[解説]
sort() 関数で、指定列の並びを昇順(0)/降順(1)にします。


キー列を降順にソートしたい

[結果]
C1C2
13
23
34
410
57
61
76
84
92
106
   =>   
C1C2
410
57
106
76
84
34
13
23
92
61
[VAPScript]
N = 10;
vmin = 1;
vmax = 10+1;
c1("C1") = {vmin:vmin+N-1};
c2("C2") = runif(N,vmin,vmax);
table = cbind(c1,c2);
//
keyCol = "C2";
sortOrder = 1; // 0:asc / 1:desc
result = sort(table,keyCol,sortOrder);
[解説]
sort() 関数で、指定列の並びを昇順(0)/降順(1)にします。


ソート列を使わずに逆順にソートしたい

[結果]
C1
1
2
3
4
5
6
7
8
9
10
   =>   
C1
10
9
8
7
6
5
4
3
2
1
[VAPScript]
N = 10;
c1("C1") = {1:N};
table=c1;
//
result = {};
for (i in {nrow(table):1:-1}) {
  result = rbind(result, sel(row=i,table));
}
[別解]
c = {1:nrow(table)};
table_ = cbind(c,table);
table = sort(table_,1,1);
result = table({2:ncol(table)});
[解説]
降順の数値列を for( in ) 関数のイテレータiに渡して、 末尾行から行データを取得し、 rbind()関数で取得した行データを結合していきます。

別解では、ソート用の数列を作成し、一時的にtableに結合(cbind())させ、ソート(sort())を行ったあとで、ソート用の列を取り除き(table())ます。