2010年9月4日土曜日

asorti = 配列の添え字を取り出して並び替える(Gawk専用) - AWK

AWKの配列操作関数と関連機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
配列の添え字を取り出して、小さな順に並び替えます。

o 配列の添え字を、値として並べます。


**** 書式
--------
asorti(並び替えたい配列 [, 並び替え結果])
--------

o この関数は、Gawkの拡張機能です。
o 並び替えたい配列 -- 他に指定がないと、この配列を直接変更します。
o 並び替え結果 -- 配列を返します。「並び替えたい配列」を直接変更したくない時に指定します。
   + 呼び出す時に、値を設定する必要はありません。
o 戻り値 -- 配列の要素数です。


**** 使用例
--------
BEGIN {
  a["CV-01"] = "ミクさん";
  a["CV-02"] = "リンレン";
  a["CV-03"] = "ルカ様";
  n = asorti(a, b);

  print "ミクさん達の登場順";
  for (i = 1; i <= n; ++i) {
    print i "番。" b[i] "、" a[b[i]];
  }
}
--------

o asorti 呼び出し後の、配列 b(並び替え結果)の内容
--------
b[1] = "CV-01";
b[2] = "CV-02";
b[3] = "CV-03";
--------

o 実行結果
--------
ミクさん達の登場順
1番。CV-01、ミクさん
2番。CV-02、リンレン
3番。CV-03、ルカ様
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
o 逆順に表示したい時は、後ろから数えます。


**** 機能
o 配列の添え字を取り出して、小さな順に並び替えます。
   + 配列の添え字を、値として並べます。
   + そして、添え字を 1から順に付け直します。
o 「並び替え結果」の指定が無い時は、「並び替える配列」を直接変更します。

o 並び替え順序は、文字列の小さい順です。
   + 添え字に数値を指定した時も、「文字列としての小さな順」に並びました。1 11 2 の順序です。
   + asortの並び順とは少し違いますので、ご注意下さい。
o 大文字小文字を区別したくない時、変数 IGNORECASEの値を設定すると、動作が変わります。
o 同じ値を持つ要素が複数あると、それらの要素は連続して並びます。「纏めて一つの要素にする」事はしません。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** メモ
o この機能は、配列の添え字を文字列にしている時に便利です。
o for (i in a) を使って表示させると、添え字順に並ぶとは限らないからです。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3 -- 非対応
o Mawk for Windows 1.3.3 -- 非対応
o original = the one true awk(updated May 1, 2007) -- 非対応


==
関連ページ:
    ▼AWKの配列操作関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > SUBSEP = 配列の添え字の区切り文字
    +
    asort = 配列の要素を並び替える(Gawk専用)