2015-03-02 40 views
0

比方說陣列看起來像下面如何找到共同的元素在陣列重複紅寶石

city = ['london', 'new york', 'london', 'london', 'washington'] 

desired_location = ['london'] 

city & desired_location['london']

,但我想['london', 'london', 'london']

+0

好,你有一些志向/目標。現在你需要告訴你需要什麼幫助,你在哪裏被困住。 – mattias 2015-03-02 17:14:01

+0

基本上,我需要從兩個數組中取出通用元素並從通用元素中取出頂部重複元素。 – 2015-03-02 17:17:56

+0

@HariKrishnan,你必須非常具體地瞭解你需要什麼。在你的例子中,我們所能說的只是從'city'獲得所有對象,它也存在於'desired_locations'中。這正是我的解決方案所做的。在你的問題中,你還沒有提到任何關於頂級重複元素的內容。我們不可能猜到這一點。 – Santhosh 2015-03-03 04:51:53

回答

2

您可以使用Enumerable#select

city.select {|c| desired_location.include?(c)} 
# => ["london", "london", "london"] 
+0

但我想與所需的位置數組進行比較。這不會幫助我.. – 2015-03-02 17:20:08

+0

我認爲這將工作,但這兩個數組將包含1000 +元素。這是可行的嗎? – 2015-03-02 17:29:49

+0

比較所需的位置?,什麼Santhosh投入工作。 city.select {| c | desired_location.include?(c)}將返回['london','london','london']。如果desired_location是desired_location = ['london','new york'],你會得到[「london」,「new york」,「london」,「london」] – fanta 2015-03-02 17:32:29

0

另一種方法:

cities = ['london', 'new york', 'london', 'london', 'washington'] 
puts cities.select{|city| cities.count(city) > 1} 
+1

但我想與所需的位置數組進行比較。這不會幫助我.. – 2015-03-02 17:19:10

1
cities = ['london', 'new york', 'london', 'london', 'washington'] 

如果desired_location包含一個元素:

desired_location = ['london'] 

我建議@桑托斯的解決方案,但是這也適用:

desired_location.flat_map { |c| [c]*cities.count(c) } 
    #=> ["london", "london", "london"] 

假設desired_location包含多個元素(這是我假設是一種可能性,否則將不需要它是一個數組):

desired_location = ['london', 'new york'] 

@Santosh」方法的返回值:

["london", "new York", "london", "london"] 

這很可能是你想要的。如果你喜歡他們進行分組:

desired_location.flat_map { |c| [c]*cities.count(c) } 
    #=> ["london", "london", "london", "new york"] 

或:

desired_location.map { |c| [c]*cities.count(c) } 
    #=> [["london", "london", "london"], ["new york"]] 

根據您的要求,您可能會發現它更適用於生產哈希:

Hash[desired_location.map { |c| [c, cities.count(c)] }] 
    #=> {"london"=>3, "new york"=>1} 
+0

謝謝@cary,讓我試試並回復你。看起來會起作用。從最後的散列,它最終排序。我的意思是,第一個元素將永遠是頂部? – 2015-03-03 04:30:19

+0

只要您使用的是Ruby v1.9 +,那麼在末尾的哈希鍵將保證按照它們在'desired_location'中的順序排列。 – 2015-03-03 04:41:48