如何找到 3 个数组的交集,同时忽略空数组?

Aru*_*mar 3 ruby ruby-on-rails

我必须找到 3 个整数数组(例如 a、b、c)与条件的交集元素;如果数组中的任何一个为 null ( []),则忽略该数组并查找剩余数组的交集,如果三个数组都为 null,则返回 []。提前致谢。

ps:红宝石1.9.3

Bor*_*cky 5

一种方法是这样的:

[ a, b, c ].tap{ |a| a.delete( [] ) }.reduce( :& ) || []
Run Code Online (Sandbox Code Playgroud)

讨论中建议的其他选项是:

[ a, b, c ].reject( &:empty? ).reduce( :& ) || []
Run Code Online (Sandbox Code Playgroud)

和:

[ a, b, c ].select( &:any? ).reduce( :& ) || []
Run Code Online (Sandbox Code Playgroud)

但在最后一种情况下,请注意具有显式 nil 元素的非空数组,例如[ nil ],因为它们仍然失败#any?测试。

  • `点击{|a| a.delete([])`:也许更好的是`reject(&:empty?)`。 (3认同)
  • @tokland `reduce([], :&)` 在这种特殊情况下不起作用......(将始终返回 `[]`)。 (2认同)