具有额外条件的Ruby uniq

时间:2015-04-28 15:30:01

标签: ruby-on-rails ruby activerecord uniq

我有一个ActiveRecord对象数组,其中Object.word是一个字符串。

我知道

<complexType name="ShipOrderType">
    <sequence>
        <element name="orderperson" type="string"></element>
        <element name="shipto" type="tns:shiptoType"></element>
    </sequence>
    <attribute name="orderid" type="int" use="required"></attribute>
</complexType>

<complexType name="shiptoType">
    <sequence>
        <element name="name" maxOccurs="1" minOccurs="1" type="string">
        </element>
        <element name="city" type="City">
        </element>
    </sequence>
    <attribute name="orderid" type="string"></attribute>
</complexType>

<simpleType name="City">
    <restriction base="string">
        <enumeration value="Bangalore"></enumeration>
        <enumeration value="Mysore"></enumeration>
    </restriction>
</simpleType>

将返回具有唯一:字值的对象。

我还想制作一个额外的条件(如果可能的话,使用uniq),这样就不会有任何单词远离另一个单词:具体来说,我不想返回带有“知道”和“知道”字样的对象,或“称重”和“称重”,但只选择其中一种。

有没有一种简洁直观的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

您可以使用拒绝拒绝某些元素,具体取决于某些条件,例如:

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

答案 1 :(得分: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"]