はじめてのJScript+WSH 番外3 2次元配列のソート

はじめに

Cisco機のshow ip routeの結果や、show run内のip routeコマンドなどIPアドレス順になります。この順番にするためにソートをできるようにします。

※下記記事の続きです

二次元配列をソートする

要素の1つ目をソート用の文字列にすればソートされるようです。
また下記コードのソート前の二次元配列(arr2)は下記のようになっています。
arr2=[
  [192.168.001.000, 192.168.1.0],
  [172.016.020.064, 172.16.20.64/26],
  [010.001.010.100, 10.1.10.100/32],
  [000.000.000.000, show ip route],
];

// IPアドレスの各オクテットを0埋めして返す関数
// 例)10.1.10.100 => 010.001.010.100
//     IPアドレス以外は"000.000.000.000"を返す
var zeroPaddingAddress = function(str){

    if( str.search(/(\d+\.\d+\.\d+\.\d+)|(\d+\.\d+\.\d+\.\d+)\/\d+/) > -1 ){

        var arr = str.match(/(\d+\.\d+\.\d+\.\d+)|(\d+\.\d+\.\d+\.\d+)\/\d+/);
        arr = arr[1].split(".");
        return  ("00"+arr[0]).slice(-3)+"."
               +("00"+arr[1]).slice(-3)+"."
               +("00"+arr[2]).slice(-3)+"."
               +("00"+arr[3]).slice(-3);
    }else{
        return "000.000.000.000";
    }
}

// ソート前の配列
var arr = [
    "192.168.1.0",
    "172.16.20.64/26",
    "10.1.10.100/32",
    "show ip route"
];


// 配列を2次元配列に格納する。
// 1つ目の要素はソート用、2つ目の要素は元の文字列とする。
// 例) arr[i] => "10.1.10.100"
//     arr2[i] => ["010.001.010.100", "10.1.10.100"]
var arr2 = [];
for(var i = 0; i < arr.length; i++){
    arr2[i] = [zeroPaddingAddress(arr[i]), arr[i]];
}

arr2.sort(); // ソート

// ソート後の元の文字列を、ソート前の配列に戻す
for(var i = 0; i < arr2.length; i++){
    arr[i] = arr2[i][1];
}

// 表示
for(var i = 0; i < arr.length; i++){
    WScript.echo(arr[i]);
}

また下記コードのソート後の二次元配列(arr2)は下記のようになっています。
arr2=[
  [000.000.000.000,show ip route],
  [010.001.010.100,10.1.10.100/32],
  [172.016.020.064,172.16.20.64/26],
  [192.168.001.000,192.168.1.0]
];

おわりに

2次元配列を1次元配列に変える部分は、そういう関数があるかもしれないです。

この記事が気に入ったらサポートをしてみませんか?