2012-03-06 6 views
0

私は、合計で約300万行の大きなテキストファイルのセットを持っています。大量のテキストファイルで一意の値をコンパイルする最も効率的な方法は?

私がしたいことは、各行から与えられた列の値を取り出して、メモリ内の配列に追加することです。値がすでにアレイに存在する場合は、それを無視します。私は、最速の方法を想定してい

ではありません:(配列のネイティブインデックスまたは何-持っている - あなたの方法を使用して)存在する場合

  • は、その配列にプッシュ
  • 値を読む

一致/検索のスピードを上げるために、値をアルファベット順に挿入する必要がありますか?

複数の配列を保持する必要がありますか?たとえば、アルファベットの各文字に1つずつ

答えて

4

使用Set

セットが重複なしで順不同の値のコレクションを実装しています。これは、Arrayの直感的な相互運用機能とHashの高速検索のハイブリッドです。

使用例:

require 'set' 

set = Set.new 
set << 1 << 2 << 3 # => #<Set: {1, 2, 3}> 
set << 2   # => #<Set: {1, 2, 3}> 
+0

本当に面白い、ありがとう –

2

値をハッシュマップにキーとして追加すると、重複を自動的に削除することができます。あなたは、各値がこのように(ハッシュ値で)出現する回数を数えることさえできます。

+1

お手元に適切な設定データ構造を持っていないと仮定。 (私はRubyをよく知っていませんが、実際にはそのようなものはありません。このアプローチはハッシュテーブルを使って1組をシミュレートすると言っています) – delnan

+0

@delnan RubyはSetデータ構造を持っています。 ':)' –

+0

はい、ハッシュが可能です。キーの数が大幅に増えるにつれ、それはかなり遅くなりますか?インスタンスを数えることは有用ですが、必要ではないので、効率が重視されます。 – Zando

関連する問題