[英]How to make this ruby code more DRY
我只是做了以下代碼。 我在語法和模式上看到很多重復(例如,一遍又一遍地使用temp變量r,當它不是nil時追加字符串)。 我怎樣才能使它更干? 我來自C語言背景,只是試圖學習Ruby的抽象和簡化方法以獲得優雅的代碼...
# Traverse a matrix spirally
def subm(m)
result=[]
if m.length>1
m[1..-2].each {|a| result << a[1..-2]}
end
result
end
def trav_sp(m)
result=[]
if not m.empty?
result += m[0] if m[0]
r=[]
m[1..-1].each {|a| r << a[-1]} if m[1..-1]
result += r
r=[]
if m[-1]
m[-1].each_with_index{|a,i| (r<< m[-1][-2-i] if m[-1][-2-i])}
result += r
end
r=[]
m.each_with_index {|a,i| (r<< m[0][-2-i] if m[0][-2-i])}
result += r
return result = result + trav_sp(subm(m))
else
return result
end
end
您可以使用map
而不是將元素重復添加到臨時數組,以及其他一些更改:
# Traverse a matrix spirally
def subm(m)
m[1..-2].map {|a| a[1..-2]}
end
def trav_sp(m)
result = []
if not m.empty?
result += m[0] if m[0]
result += m[1..-1].map {|a| a[-1]} if m[1..-1]
r = []
if m[-1]
m[-1].each_with_index{|a,i| (r<< m[-1][-2-i] if m[-1][-2-i])}
result += r
end
r = []
m.each_with_index {|a,i| (r << m[0][-2-i] if m[0][-2-i])}
result += r
result += trav_sp(subm(m))
end
result
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.