2013-12-17 18 views
0

我是一位新的Ruby程序員,他正在執行一項練習來製作一個讓人們玩魚的程序。我正在構建一種搜索書籍並在發現它們時處理它們的方法。我把我的玩家手放在一個數組中,所以我想搜索他們的匹配。搜索Ruby數組以獲得VALUE的最簡單方法是什麼? (並刪除特定的數組元素)

我的2個問題是:

  1. 什麼是通過陣列搜索 最簡單,最有效,最簡單的方法是什麼?
  2. 當我在同一個數組中找到4個特定元素時,從數組中刪除這些元素的最佳方法是什麼?

我需要:

  • 搜索的%w(2 3 4 5 6 7 8 9 10 J Q K A) #Values for cards每個元素的數組,(我要使用這個做每個迭代,我得到的)。 我需要知道如何首先搜索數組。
  • 計數每次我遇到一個匹配的元素
  • 如果count == 4,我有一本書,所以我需要知道如何刪除陣列#的特定元素(4張匹配的卡片)

我知道這是簡單的東西,所以感謝您的幫助和耐心!

回答

0

要搜索數組中的元素,您可以使用select(別名find_all)。 Select將循環並選擇與所提供的塊中的條件匹配的元素,並返回數組中的「selected」元素。

實施例:

['2', '3', '4'].select { |card| card == '2' } #=> ["2"] 

你也可以刪除需要通過使用散列代替(映射卡值的卡的數量)通過陣列進行搜索。這將使您可以輕鬆檢查手中包含的特定類型的卡片數量(請參閱下面的示例)。

要計算每次遇到元素時,您需要一些數據結構來存儲卡片值和計數。哈希將是一個很好的選擇。

示例:卡值=>計數

{ '2' => 1 } 

從陣列可以使用#DELETE或#delete_at刪除基於值或基於它們的數組索引元素的元素刪除元素。另一種選擇是使用像#select這樣的爆炸方法!根據提供的塊來轉換當前的數組。 Ruby有很多這樣的任務的選項。

我推薦使用Array和Enumerable的方法來更好地處理數組可以做什麼。這很值得你花時間,因爲Ruby的強大和優雅在於Array和Enumerable。

http://www.ruby-doc.org/core-2.0.0/Array.html#method-i-select

http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-select

祝您好運!

+0

謝謝,我只是使用與'.size'和它工作得很好。謝謝! – Yallo

0

你可能想看看enumerable模塊。這裏有非常整潔的文檔:http://ruby-doc.org/core-2.0.0/Enumerable.html我的建議是掃描本模塊中的所有方法,因爲它們都非常有用。對於你的任務,我可能會使用count方法。如果你想計算所有的卡,group_by是你想要的。加上map你可以這樣做:

hand = [2,3,6,10,2,J,A,3,J,2,K,K,2] 
Hash[hand.group_by{|value| value}.map{|key, values| [key, values.count]}] 
# => {2 => 4, 3 => 2, 6 => 1, 10 => 1, J => 2, A => 1, K => 2} 
1

很多過於複雜的答案。

想知道元素是否在數組中?使用include?

[1, 2, 3, 4].include?(4) # true 
[1, 2, 3, 4].include?(5) # false 

想要從數組中刪除所有值的實例嗎?使用delete

x = [1, 2, 3, 4] 
x.delete(4) # 4 
x # [1, 2, 3] 

y = [1, 1, 2, 2, 3, 3] 
y.delete(4) # nil 
y # [1, 1, 2, 2, 3, 3] 
y.delete(2) # 2 
y # [1, 1, 3, 3] 

如果你要計算的時代出現的一個術語的數量,使用count

x = ['a', 'a', 'b', 'b', 'b'] 
x.count('a') # 2 
x.count('b') # 3 
+0

感謝您的簡單,刪除方法很好。 **然而**只有在數組**具有**元素時,纔會返回包含方法,而不是在元素出現在數組中多少**次。有什麼? – Yallo

+0

感謝您的刪除方法! – Yallo

+0

@Yallo是的,使用'count'來找出**元素在陣列中出現多少次**。查看更新的答案。 – meagar

相關問題