我有一個ActiveRecord對象數組,其中Object.word是一個字符串。具有額外條件的Ruby uniq
我知道
array.uniq{|s| s.word}
將返回唯一的對象:字值。
我也想做一個額外的條件(如果可能的話使用uniq),這樣任何單詞都不會離開另一個單詞:特別是,我不想用「知道」和「知道」 ,或者「權衡」和「權衡」,但只能選擇其中之一。
有沒有一種簡潔直觀的方法來實現這一目標?
我有一個ActiveRecord對象數組,其中Object.word是一個字符串。具有額外條件的Ruby uniq
我知道
array.uniq{|s| s.word}
將返回唯一的對象:字值。
我也想做一個額外的條件(如果可能的話使用uniq),這樣任何單詞都不會離開另一個單詞:特別是,我不想用「知道」和「知道」 ,或者「權衡」和「權衡」,但只能選擇其中之一。
有沒有一種簡潔直觀的方法來實現這一目標?
你可以用拒絕來拒絕一些元素取決於例如在一些條件:
[1,2,3].reject {|a| a > 1} # [1]
像'array.reject {| a | array.include?(a +'s')}'? –
是的,如果這是你的病情。 –
類似的東西,但你必須找出確定這個詞的「親密度」的算法。從如何將條件注入到選擇項目中,這實際上是一個單獨的問題。 – jefflunt
您可以使用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"]
在這兩個例子中,你想擺脫的一個單詞總是另一個帶有「s」的單詞。這是你的實際要求嗎?或者,它是否適用於任何單字符差異?例如,如果你的輸入是'[「foo」,「bar」,「too」,「bat」]',你想要返回什麼? –
「[」蝙蝠「,」下注「,」位「,」坐「,」坐「,」設置「]'? –
理想情況下,它只會返回帶有唯一引理的詞,但是因爲時間緊迫,我現在不會去那裏:)所以我的短期修復是排除第三人稱詞的現在時態。 –