在 Ruby 中的一行中循环遍历数组的代码

Lax*_*Sam 2 ruby

我循环遍历数组self.sisters如下:

brothers_in_law = []
self.sisters&.each do |sister|
  brothers_in_law << sister.spouse (if !sister.spouse.nil?)
end
Run Code Online (Sandbox Code Playgroud)

我怎样才能以红宝石的方式编写它,并且在一行中编写它?

Ser*_*sev 7

在 ruby​​ 中,一个经验法则是:如果你有一个each循环用于除简单迭代元素之外的任何事情,那么有 99% 的机会有更好的方法。

brothers_in_law = sisters.map(&:spouse).reject(&:nil?)
# or 
brothers_in_law = sisters.map(&:spouse).compact
# or in ruby 2.7+
brothers_in_law = sisters.filter_map(&:spouse)
Run Code Online (Sandbox Code Playgroud)