タグ

配列に関するtakaesuのブックマーク (7)

  • 【JavaScript】Arrayの重複を排除する最もシンプルな方法

    RDBMSなどでは、Distinctという構文があったりするのですが、JavaScriptでは重複を排除するために少しの工夫が必要になります。 例えば、以下のような配列があるとします。 let arr = [0,1,1,2,3,4,4,4,5]; このうち、重複するデータが必要ないケースを考えてみます。 Setを使う ES2015(ES6)で導入されたSetは、今回のように重複を許さない使い方には非常に有効なオブジェクトです。 実際に配列を変換してみます。 let arr = [0,1,1,2,3,4,4,4,5]; let set = new Set(arr); console.log(set); // -> Set { 0, 1, 2, 3, 4, 5 } 簡単ですね。 SetからArrayへの変換 Arrayオブジェクトには、mapやfilterなどの便利なメソッドがありますが、Se

  • Fisher–Yatesアルゴリズムがすごかったです。: PandaNoir

    調べ物をしていたら、Fisher–Yatesというアルゴリズムを見つけました。有名なのかな?とにかく考え方がとてもシンプルでよかったので紹介します。 Fisher–Yatesって何? Fisher–Yatesとは、要するにシャッフルする方法のひとつです。最速です。 どういうアルゴリズム? Fisher–Yatesは、ランダムに配列から抽出して並べていくというものです。そのままですね。では、実装されたコードを紹介します。実物を解説した方が早そうなので。コードは配列を少ない仕事量でシャッフルするFisher-Yates法参照です。 var n = a.length; for(var i = n - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var tmp = a[i]; a[i] = a[j]; a[j] = t

  • 配列内の重複する値を抽出する方法を測ってみた - たぐってつづる

    Rubyで配列内の重複する値を抽出する方法 というエントリを見て触発されてベンチマークを取ってみました. 紹介されている方法は下記のようなコード a = [1, 2, 3, 4, 5, 6, 5, 4] a.uniq.map{|v| v if a.inject(Hash.new(0)) {|h, key| h[key] += 1; h}[v] >= 2}.compact mapのブロック内でのイテレートはコストが高く, 下記のエントリのようにArray#indexとArray#rindex を使う方法が簡潔で早いと思います. Rubyで配列から重複したモノ(要素)を抜き出す(Uniqの逆) a.uniq.select{|i| a.index(i) != a.rindex(i)} ついでに,上記エントリにある方法に追加して「Hashに集計して重複しないものを削除」 a.inject(Hash

    配列内の重複する値を抽出する方法を測ってみた - たぐってつづる
  • Rubyで配列内の重複する値を抽出する方法 - 久保清隆のブログ

    Rubyで重複する値を排除したい場合は、uniqメソッドを使えばOK。 a = [1, 2, 3, 4, 5, 6, 5, 4] a.uniq #=> [1, 2, 3, 4, 5, 6] 重複している値があるかどうかを調べるなら、uniqを利用すれば簡単にわかる。 a = [1, 2, 3, 4, 5, 6, 5, 4] a.size == a.uniq.size #=> false でも、配列から重複している値を抽出するメソッドは見当たらない(たぶん)。 そこで、配列から重複している値を抽出するスクリプトを書いてみた。 配列から重複している値を抽出する a = [1, 2, 3, 4, 5, 6, 5, 4] a.uniq.map{|v| v if a.inject(Hash.new(0)) {|h, key| h[key] += 1; h}[v] >= 2}.compact #=>

    Rubyで配列内の重複する値を抽出する方法 - 久保清隆のブログ
  • Rubyで配列から重複したモノ(要素)を抜き出す(Uniqの逆) - それマグで!

    Rubyで配列の重複しているモノを調べるには。 Rubyって配列から重複しているモノだけを知りたい時どうするか?Yahoo!知恵袋の回答はアテにならないし、OKWaveもイマイチだった。そこでマニュアルとにらめっこして考えた。 配列から重複を取り出す例。 => a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8] #偶数がダブりの配列 >> a.select{|e| a.index(e)!=a.rindex(e)} => [2, 4, 6, 8, 2, 4, 6, 8] >> a.select{|e| a.index(e)!=a.rindex(e)}.uniq => [2, 4, 6, 8] rindex/indexの活用。 index(val) 最初の形式では、val と == で等しい最初の要素の位置を返 します。 rindex(val) val と ==

    Rubyで配列から重複したモノ(要素)を抜き出す(Uniqの逆) - それマグで!
  • Perl の map と grep を使う

    すしを奢らなければいけないなんて、バトンを渡されてから知りました。おいしい寿司がいたい sekimura です。 今回は使いこなすと気持ちよくて、使いすぎると気持ち悪いと言われてしまう grep と map の使い方について紹介します。この二つは文法がよく似ていて、同時に使われることも多いので一気に両方の使い方を覚えるのをおすすめします。 grep: 配列をフィルターする まずは、前回覚えた perldoc を使って grep とはなにかを調べてみましょう。 $ perldoc -f grep grep BLOCK LIST grep EXPR,LIST This is similar in spirit to, but not the same as, grep(1) and its relatives. In particular, it is not limited to usin

  • 配列内の重複しているデータを削除して(1つにまとめて)取り出す。[grep] - Leilaのブログ

    my @array = ('l', 'e', 'i', 'l', 'a'); my %count; @array = grep( !$count{$_}++, @array ) ; print @array; ⇒出力は『leia』 なんとなーくやってる事は解るけれど、 見ただけだとちゃんと理解できない。。 grepと !$count{$_}++ の意味がよく解らないの。 という訳で、少し分解。 = = = = = = = = @test = ('dummy', 'test', 'ddummyy') ; @array = grep(/dummy/, @test) ; grepは真偽を判断して、真の値のみを返す。 ↑の場合は、@testの要素を1つずつ『dummy』と比較して 『dummy』が含まれていたら「真」、含まれていなかったら「偽」を返す。 ⇒結果、@arrayには「真」のデータだけ返

    配列内の重複しているデータを削除して(1つにまとめて)取り出す。[grep] - Leilaのブログ
  • 1