如何解决在Ruby中一行代码遍历数组的代码
我正在遍历数组self.sisters
,如下所示:
brothers_in_law = []
self.sisters&.each do |sister|
brothers_in_law << sister.spouse (if !sister.spouse.nil?)
end
我如何以红宝石的方式以及一行地编写它?
解决方法
在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)
,
测试:
sister = OpenStruct.new(spouse: "1")
sister1 = OpenStruct.new(spouse: "2")
sister2 = OpenStruct.new(spouse: nil)
sisters = [sister,sister1,sister2,nil]
brothers_in_law = []
brothers_in_law.concat sisters.compact&.map(&:spouse).compact unless sisters.nil?
=> ["1","2"]
compact
调用会删除姐妹及其配偶的nil
值,因此仅返回存在的配偶对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。