2012-03-12 10 views
0

私は配列を持っています:Rubyの配列名quals次の名前

私はそこにデータベースとレコードを持っています。例えば

(デシベル=モデル)

db = DB.find(:all) 

records = db.name 

records.to_a 

と(私はDBに似たレコードを持っているので)私はチェックを行うことができますどのように、知っている:

if record name == next record name 
puts "yes, smiliar" 
else 
puts ":(" 
end 

を私は現在の配列を確認する必要があります名前を次へと、もし私が上に示したものと同じならば、 "yes"を入れます。

+0

'record = db.name'はどういう意味ですか? DBがモデルの場合、 'DB.find(:all)'はメソッド 'name'を持たない配列を返さなければなりません – evfwcqcg

+0

私には宿題があります。 – Dogweather

答えて

0

前のレコードとの比較は簡単です。たぶん、あなたはこの方法で問題を解決することができます:

prev = nil 
records.each do |record| 
    if record.name == prev.name 
     puts "similar" 
    else 
     puts ":(" 
    end 
    prev = record 
end 
5

を配列内の2つの要素を比較するにはあなたは、私が使用したい、順序を気にしない場合は、each_cons方法

[1,2,2,2,1].each_cons(2) do |a| 
    puts (a.first == a.last) ? "similar" : ":(" 
end 

# => :(
# => similar 
# => similar 
# => :(
0

を使用することができGROUP_BY :

db = DB.find(:all, :select => 'name').collect(&:name) 
arr = = Array[db.group_by {|x| x}.map {|k,v| k if v.size > 1}] 
arr.compact! 

:select => 'name'一部はオプションですが、小さなクエリを保つことができます。

これは一意ではない名前のリストを返します

関連する問題