アルゴリズム+データ構造勉強会(8)

2,798 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

アルゴリズム+データ構造勉強会(8)

  1. 1. アルゴリズム+データ構造 勉強会(8) 2013-03-25 アロハ)竹腰 彰成
  2. 2. 第8回 usort()を使ったソート
  3. 3. usort()の前に:sort()• http://www.php.net/manual/ja/function.sort.php • 配列をソートする• 通常、ソートが必要な場合は用意されている関数を使う • ソートアルゴリズムを自前で作ると不具合混入の恐れがある • クイックソートをチューニングした関数なので速い • 楽できる
  4. 4. usort()とは• http://php.net/manual/ja/function.usort.php • usort — ユーザー定義の比較関数を使用して、配列を値でソートする• 比較関数だけを作り、実際の入れ替えは組み込み関数に任せてし まう
  5. 5. usort()の使い方• PHPマニュアルより • 出力例• <?php • 0: 1 function cmp($a, $b) { 1: 2 if ($a == $b) { return 0; 2: 3 } 3: 5 return ($a < $b) ? -1 : 1; } 4: 6 $a = array(3, 2, 5, 6, 1); usort($a, ’cmp’); foreach ($a as $key => $value) { echo "$key: $value¥n"; }
  6. 6. create_function()を使う場合(匿名関数)• 使い捨ての関数になりがちなので、使い捨ててしまう方法• <?php$a = array(3, 2, 5, 6, 1);usort($a, create_function(‘$a, $b’, ‘if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1;’ ));foreach ($a as $key => $value) { echo "$key: $value¥n";}
  7. 7. PHP5.3:クロージャを使う場合(無名関数)• JavaScriptのように書ける(ただしPHPの人には読みにくいかもしれない)• <?php $arr = array(3, 2, 5, 6, 1); usort($arr, function($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; }); foreach ($arr as $key => $value) { echo "$key: $value¥n"; }
  8. 8. usort()を使うシーン• 組み込みでのソート関数では対応できない場合• 数値・文字列には対応しているがarrayやobjectには対応していない
  9. 9. 実習:usort()の利用• usort()を使って次のものを実装してください。 • array( array(1,4,7), array(3,6,9), array(8,5,2) ) • 配列の中の合計値の小さい順に並び替える• 勉強会の残り時間を使って書いてください。時間のある限り質問を 受け付けます• できあがったら提出してください• 時間に間に合わない場合は宿題にします
  10. 10. 今回の単語まとめ• usort()• create_function()• クロージャ

×