2015-04-28 26 views
0

我有一個ActiveRecord對象數組,其中Object.word是一個字符串。具有額外條件的Ruby uniq

我知道

array.uniq{|s| s.word} 

將返回唯一的對象:字值。

我也想做一個額外的條件(如果可能的話使用uniq),這樣任何單詞都不會離開另一個單詞:特別是,我不想用「知道」和「知道」 ,或者「權衡」和「權衡」,但只能選擇其中之一。

有沒有一種簡潔直觀的方法來實現這一目標?

+1

在這兩個例子中,你想擺脫的一個單詞總是另一個帶有「s」的單詞。這是你的實際要求嗎?或者,它是否適用於任何單字符差異?例如,如果你的輸入是'[「foo」,「bar」,「too」,「bat」]',你想要返回什麼? –

+0

「[」蝙蝠「,」下注「,」位「,」坐「,」坐「,」設置「]'? –

+0

理想情況下,它只會返回帶有唯一引理的詞,但是因爲時間緊迫,我現在不會去那裏:)所以我的短期修復是排除第三人稱詞的現在時態。 –

回答

2

你可以用拒絕來拒絕一些元素取決於例如在一些條件:

[1,2,3].reject {|a| a > 1} # [1] 
+0

像'array.reject {| a | array.include?(a +'s')}'? –

+0

是的,如果這是你的病情。 –

+0

類似的東西,但你必須找出確定這個詞的「親密度」的算法。從如何將條件注入到選擇項目中,這實際上是一個單獨的問題。 – jefflunt

1

您可以使用Rails的singularize得到了這個詞的奇異值,並且仍然使用您的uniq代碼:

array.uniq{|s| s.word.singularize} 


[2] pry(main)> ["test", "tests", "word", "words", "entity", "entities"].uniq{|s| s.singularize} 
=> ["test", "word", "entity"] 
+0

不錯。但我認爲這不適用於動詞。 –

+0

你能舉一個複數動詞的例子嗎? – tebayoso

+0

我的意思是區分「知道」和「知道」 - 基本呈現形式和第三人呈現形式。 –