COBOL 配列の並び替え
COBOLでは、SORT ステートメントを使用して配列の並び替えを行います。SORT ステートメントの構文は次のとおりです。
SORT sort-file [USING identifier]
[ASCENDING | DESCENDING] [key-name]
[..., key-name] [, control-name]
ここで、
- sort-file は並び替える配列の名前です。
- identifier は、並び替えに使用する索引または代替アクセスキーの名前です。
- ASCENDING または DESCENDING は、昇順または降順の並び替えを指定します。
- key-name は、並び替えの基準とする配列要素の名前です。
- control-name は、並び替えの順序を制御する配列要素の名前です。
昇順での並び替え
配列を昇順に並び替えるには、ASCENDING キーワードを使用します。たとえば、次のコードは、employee-array 配列を employee-id 列で昇順に並び替えます。
SORT employee-array ASCENDING employee-id
降順での並び替え
配列を降順に並び替えるには、DESCENDING キーワードを使用します。たとえば、次のコードは、employee-array 配列を employee-id 列で降順に並び替えます。
SORT employee-array DESCENDING employee-id
複数のキーによる並び替え
複数のキーによる並び替えを行うには、複数の key-name を指定します。キーは左から右に評価され、最初の等しくないキーが並び替えの基準になります。たとえば、次のコードは、employee-array 配列を employee-id 列で昇順に、employee-name 列で降順に並び替えます。
SORT employee-array ASCENDING employee-id DESCENDING employee-name
制御名の使用
control-name を指定すると、並び替えられた配列内の特定の行を制御できます。コントロール名は、並び替えの順序を制御する値を格納する配列要素です。たとえば、次のコードは、group-array 配列内のグループ名をグループごとに並び替えます。
SORT group-array
USING group-id
ASCENDING group-name
CONTROL group-total
この例では、group-id 索引を使用して配列を並び替え、group-name 列を昇順基準として使用します。group-total 列はコントロール名として使用され、グループごとに合計値を格納します。
SORT ステートメントの使用時のヒント
- SORT ステートメントは、処理されるすべての配列要素がソート可能であることを確認してください。
- SORT ステートメントを使用する前に、配列が十分な大きさであることを確認してください。
- SORT ステートメントは、配列内のすべての要素を移動するため、パフォーマンスに影響が出る可能性があります。
- 可能であれば、インデックスを使用して並び替えを実行してください。インデックスを使用すると、配列内のすべての要素を読み込む必要がないため、パフォーマンスが向上します。
その他の並び替え手法
SORT ステートメントの他にも、COBOL では配列の並び替えに他の手法を使用できます。
- 手動での並び替え:MOVE ステートメントを使用して個々の配列要素を手動で並び替えることができます。これは、配列が小さい場合に適した手法です。
- ライブラリルーチン:COBOL ランタイムライブラリには、配列の並び替えに役立つライブラリルーチンが用意されています。これらのルーチンは、SORT ステートメントよりも効率的ですが、使用には追加のオーバーヘッドがあります。
どの並び替え手法を使用するかは、配列のサイズ、並び替えの複雑さ、パフォーマンス要件によって異なります。
I love codes. I also love prompts (spells). But I get a lot of complaints (errors). I want to be loved by both of you as soon as possible.