Pythonで辞書のリストをソートする方法

Pythonで辞書のリスト(配列)をソートする方法について調べました。すぐに忘れるのでメモしておきます。 (さらに…)

Pythonでバブルソートと選択ソートと挿入ソート

最近、Pythonを始めました。
前に書いた記事のテストを兼ねてバブルソートと選択ソートの関数を書いてみました。 (さらに…)

Excelで複数行をまとめてソートする方法

Excelの並び替えは1行単位で行いますが
複数行をまとめて並び替えをしたいケースがあります。 (さらに…)

VBAでクイックソート(改良版)

前にVBAでクイックソートをする方法を紹介しましたが、配列の扱いがよく分からず、CSVに変換して行う方法でした。
今回、配列の処理方法が分かったので、コードを書き直してみました。
処理が劇的に速くなりました。バブルソートなど他のソートとは比較になりません。 (さらに…)

VBAでクイックソート

前にVBAでバブルソートと選択ソートを行うためのユーザー定義関数を紹介しましたが、今回はクイックソートについて作ってみました。

追記(2015年8月31日)
改良版について記事を書きました。 (さらに…)

日本語辞書の順序でソートする「日本語辞書順ソート」

プログラムを使って、ひらがなをソートすると、文字コード順にソートしてしまうので、日本語辞書通りにはなりません。
大きな原因の一つは、小さな文字(捨て文字)と大きな文字の順序が逆である点です。例えば「しやく(試薬)」と「しゃく(尺)」では「しやく」が前になるはずですが、文字コードでは「ゃ」<「や」であるため、プログラムでは「しゃく」が前に来てしまいます。
また長音が正しく処理できません。例えば「あー」と「あか」では「あー」が前になるはずです。「あー」は「ああ」と読むからです。しかし文字コードでは「か」<「ー」であるため、プログラムでは「あか」が前に来てしまいます。なお「あー」は「ああ」の前に来ます。 (さらに…)

VBAで配列をソートするためのユーザー定義関数

VBAにはソートに関する関数が見当たりません。
そこで作ってみました。 (さらに…)

いろいろなソート(サンプル付き)

ソートのアルゴリズムについて調べました。
代表的なソート方法5種類について概略をまとめます。
n個の要素を持つ配列を昇順(小さい数から大きい数)にソートする場合です。 (さらに…)

長音を含む文字列を辞書順でソート

辞書の言葉の並び順はアイウエオ順ですが、「ー」という伸ばす音、長音があるときは、その前の音によって判断されます。
その前の音がア段ならば「ア」、イ段ならば「イ」となります。
例えば「ワード」ならば「ワアド」、「キー」ならば「キイ」として並び順が決まります。

ワア≫ワー≫ワアド≫ワード≫ワイ

となります。 (さらに…)

PHPの連想配列でソート

PHPで次のようなデータがあったとします。

value id
50 1
30 2
60 3
10 4

これをvalueの列の値でソートすることを考えます。
array_multisortを使いますが、基本的な使い方から説明します。

基本な使い方

valueの列とidの列の二つの配列があると考えます。

$ar1 = array(50,30,60,10);
$ar2 = array(1,2,3,4);

この二つの配列は要素の数が同じで対応しています。
array_multisortを使うと、片方の配列をソートし、もう片方の配列は対応関係を崩さずに並び変わります。

array_multisort($ar1, $ar2);

これにより次のような状態になります。

$ar1 = array(10,30,50,60);
$ar2 = array(4,2,1,3);

連想配列に応用

先ほどのデータが次のように連想配列に入っているとします。

$data[0]["value"] = 50;
$data[1]["value"] = 30;
$data[2]["value"] = 60;
$data[3]["value"] = 10;
$data[0]["id"] = 1;
$data[1]["id"] = 2;
$data[2]["id"] = 3;
$data[3]["id"] = 4;

これをvalueの値でソートすることにします。
array_multisort を使うのですが、いきなり代入することができないので、仮にソート用の配列 $sortkey を作ります。

foreach ($data as $key => $row) {
    $sortkey[$key] = $row["value"];
}

これにより次のような状態になります。

$sortkey[0] = 50;
$sortkey[1] = 30;
$sortkey[2] = 60;
$sortkey[3] = 10;
$data[0] = array("value"=>50,"id"=>1);
$data[1] = array("value"=>30,"id"=>2);
$data[2] = array("value"=>60,"id"=>3);
$data[3] = array("value"=>10,"id"=>4);

ここで $sortkey と $data を array_multisort でソートします。

array_multisort($sortkey,$data);

これにより次のような状態になります。

$sortkey[0] = 10;
$sortkey[1] = 30;
$sortkey[2] = 50;
$sortkey[3] = 60;
$data[0] = array("value"=>10,"id"=>4);
$data[1] = array("value"=>30,"id"=>2);
$data[2] = array("value"=>50,"id"=>1);
$data[3] = array("value"=>60,"id"=>3);

結果的に連想配列である $data がvalueの値によりソートされたことになります。

古い記事

タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報