2011-08-23 20 views
5

這可能是一個非常長的延伸,但會使生活更容易,如果它存在。紅寶石陣列當量的活躍記錄。其中(標準)

繼承人劇情無論如何。我有一個哈希值的數組與一個關鍵whos值是另一個哈希........是的,我知道。

繼承人一個更好的解釋:

@myArrayOfStuff[0] 
@myArrayOfStuff[0]["single-key"] 
@myArrayOfStuff[0]["single-key"]["object-identifier"] 

第一返回一個哈希值。 第二個將返回一個對象(在我的情況稱爲頁面,但示例使用不同的名稱) 第三個返回任何我引用作爲對象標識符的變量。

夠簡單。

我想要做的是挑選另一個數組,其中對象標識符值不是零或大於x。類似於activerecord.where方法。

@x = @myArrayOfStuff.where(["single-key"]["object-identifier"]) > 3orwhatever 

顯然,這不起作用,因爲語法是殘酷的。但是還有另外一種解決方法嗎?嘗試的另一條路線可能是通過此變量對數組進行排序。就像

@x = @myArrayOfStuff.sort {|x,y| y <=> x } 

但是我真的不明白ruby的排序方法是怎麼回事。 任何人都可以幫忙嗎?

+0

http://stackoverflow.com/questions/2637419/understanding-ruby-array-sort閱讀本現在,但仍然它是否適用於我想要做 – overtone

回答

13

您可以使用select方法。

@x = @my_array_of_stuff.select {|v| v["single-key"]["object-identifier"] > 3} 
+0

優秀不知道!我瞭解所有內容 – overtone

0
collection = [ 
    {a:1, b:2, c:3}, 
    {a:2, b:3, c:4} 
] 
where = {a:1} 
collection.select{|item| 
    where.map{|k,v| 
    item[k] == v ? true : nil 
    }.compact.length == where.length 
} 
+1

儘管僅限代碼答案並不禁止,但請理解,這是一個問答社區,而不是衆包的問題社區,而且通常,如果OP瞭解代碼被髮布爲答案,他/她會自己想出一個類似的解決方案,並且首先不會提出問題。同樣的原則也適用於將來可能不熟悉代碼的讀者。因此,請通過解釋* how *和/ or * why * it的作用,爲您的答案和/或代碼提供背景。 – XenoRo