MATz Tech

webの技術的なことを中心にいろいろと

ハッシュの配列をユニークにするPerlモジュール作りました

はい、前回言ってたモジュール公開しました。
metacpan.org

CPAN Authorの登録や、minilコマンド使ってのモジュール公開など、
初めてでしたが比較的やりやすかったです^^

ただ何箇所か詰まった部分もあるので、そこはPerl入学式の方に聞いて助けてもらいました。ご協力ありがとうございました!
なお、「Hash::Uniqueという名前は空間名を占有しすぎ」というご指摘もいただいたので、次回からは気をつけたいと思います。


モジュール自体は、もともとPHPで作ってた関数をPerlに移植した形です。
連想配列(Perlではハッシュの配列)を、指定したキーで一意にするという関数です。
まあ、同じようなモジュールは既にCPANにありそうですね^^;

公開したモジュールのソースはCPANから見れるので、ここでは元となったphpのソースを載せておきます。

<?php
function getUniqueAssociativeArray($arr, $key){
    $tmp = array();
    $resultArr = array();

    foreach( $arr as $value ){
        if(!in_array( $value[$key], $tmp)) {
            array_push($tmp, $value[$key]);
            array_push($resultArr, $value);
        }
    } 

    return $resultArr;
}   

$people = array(
   array('id' => 1, 'name' => '佐藤'),
   array('id' => 2, 'name' => '鈴木'),
   array('id' => 3, 'name' => '田中'),
   array('id' => 4, 'name' => '佐藤')
);

$peopleUnique = getUniqueAssociativeArray($people, "name");
var_dump($peopleUnique);
?>


結果

array(3) {
  [0]=>
  array(2) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(6) "佐藤"
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(6) "鈴木"
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(6) "田中"
  }
}