タグ

ブックマーク / qiita.com/Hiraku (3)

  • Goのsortパッケージが要求するcomparatorがboolを返すインターフェースでびっくりした件 - Qiita

    何気なくGoのsortパッケージのdocを眺めていたら、冒頭にこんな感じのサンプルが書かれていたんですよ。 sort.Slice(people, func(i, j int) bool { return people[i].Age > people[j].Age }) 要素の大小関係を比較する関数が、compareとかcmpって名前じゃなくて、lessと名付けられていて、しかもbool値を返すようになっている!! 個人的にtimeのFormat構文レベルでびっくりしたんだけど、特にググってもびっくりしてる人が見当たらなかったので記事にまとめます。 ※ちなみに経緯が調べきれなかったので、読み終わってもすっきりしない記事です!! sortのcomparatorと言えばintじゃないの?! ユーザー定義の比較関数を使って配列をソートする関数や機構は、さまざまな言語で実装されています。この比較関数

    Goのsortパッケージが要求するcomparatorがboolを返すインターフェースでびっくりした件 - Qiita
    n314
    n314 2018/07/17
    各言語がC言語の習慣を引きずっているだけとか…?
  • PHPで高速オシャレな配列操作を求めて - Qiita

    PHPには大量の配列操作関数が用意されています。 これらの関数、イマイチ書き味が悪いということで、よくPHPがDISられるポイントになっています。 お題として、こんな感じのコードを書きたいとしましょう。(意味は特にないです) 0~10000のうち、偶数だけを抽出して自乗し、結果が20を超えるものを足しあわせよ array_xxx系の関数だけで入れ子にしながら書くとこんなことになります。 echo array_sum( array_filter( array_map( function ($v) { return $v ** 2; }, array_filter(range(0, 10000), function ($v) { return $v % 2 === 0; }) ), function ($v) { return $v > 20; } ) ); 読めたもんじゃないですね。 関数の

    PHPで高速オシャレな配列操作を求めて - Qiita
    n314
    n314 2016/07/12
    create_functionでuse使う場合ってどうするんだろうと思って調べたら闇が深まる。
  • 文字列の先頭マッチ・末尾マッチはどうするのが最速か - Qiita

    任意の文字列が与えられた時、先頭が"abc"であることを判定したい。 いろいろ書き方があると思うが、どう書くのが良いのか。 「文字列が含まれているか」を判定するときはstrposを使うのが最速だと知られている。 strposは最初にneedleが現れた位置を数字で返し、見つからなければfalseを返す。 if (false !== strpos($haystack, $needle)) { echo "$needle が $haystack の中に含まれています"; }

    文字列の先頭マッチ・末尾マッチはどうするのが最速か - Qiita
    n314
    n314 2016/05/17
    strncmp っていう関数があるのか。
  • 1