Ruby是否有像Python的列表推导一样的东西?
发布时间:2020-12-16 21:47:22 所属栏目:百科 来源:网络整理
导读:Python有一个很好的功能: print([j**2 for j in [2,3,4,5]]) # = [4,9,16,25] 在Ruby中,它更简单: puts [2,5].map{|j| j**2} 但是如果是关于嵌套循环Python看起来更方便. 在Python中,我们可以这样做: digits = [1,2,3]chars = ['a','b','c'] print([str(d
Python有一个很好的功能:
print([j**2 for j in [2,3,4,5]]) # => [4,9,16,25] 在Ruby中,它更简单: puts [2,5].map{|j| j**2} 但是如果是关于嵌套循环Python看起来更方便. 在Python中,我们可以这样做: digits = [1,2,3] chars = ['a','b','c'] print([str(d)+ch for d in digits for ch in chars if d >= 2 if ch == 'a']) # => ['2a','3a'] Ruby中的等价物是: digits = [1,'c'] list = [] digits.each do |d| chars.each do |ch| list.push d.to_s << ch if d >= 2 && ch == 'a' end end puts list Ruby有什么类似的东西吗? 解决方法
Ruby的常见方法是正确组合
Enumerable和
Array方法来实现相同的方法:
digits.product(chars).select{ |d,ch| d >= 2 && ch == 'a' }.map(&:join) 这只有4个左右的字符比列表理解更长,就像表达式(IMHO当然,但是由于列表的理解只是列表monad的一个特殊应用程序,人们可以认为可能使用Ruby的集合方法充分重建),而不需要任何特殊语法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |