Ruby 带有额外条件的 uniq

Ruby uniq with extra condition

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

我知道

array.uniq{|s| s.word}

将 return 具有唯一 :word 值的对象。

我还想做一个额外的条件(如果可能的话使用 uniq)以便没有一个词与另一个词相隔一个字符:具体来说,我不想 return 对象同时包含两个词 "know"和"knows",或"weigh"和"weighs"但只能选择其中之一。

有没有简洁、直观的方法来实现这一点?

您可以根据某些条件使用 reject 来拒绝某些元素,例如:

 [1,2,3].reject {|a| a > 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"]