可能有更高效,更Ruby的方法来做到这一点:
# Pad array to size n by adding x's. Don't do anything if n <= a.length.
def padleft(a, n, x)
return a if n <= a.length
return padleft([x] + a, n, x)
end
Run Code Online (Sandbox Code Playgroud)
你会建议什么?
saw*_*awa 24
由于我对这个问题的误解而编辑.我的答案的透明版本从右侧填补,但问题是要求从左侧进行.我相应地纠正了它.这是由于命名约定.ljust,rjust被内置于方法String,我扩展该公约到Array,但其对应于padright并padleft分别在问题的术语.
破坏性方法
def padleft!(a, n, x)
a.insert(0, *Array.new([0, n-a.length].max, x))
end
def padright!(a, n, x)
a.fill(x, a.length...n)
end
Run Code Online (Sandbox Code Playgroud)
在Array课堂上定义它会更自然:
class Array
def rjust!(n, x); insert(0, *Array.new([0, n-length].max, x)) end
def ljust!(n, x); fill(x, length...n) end
end
Run Code Online (Sandbox Code Playgroud)
非破坏性方法
def padleft(a, n, x)
Array.new([0, n-a.length].max, x)+a
end
def padright(a, n, x)
a.dup.fill(x, a.length...n)
end
Run Code Online (Sandbox Code Playgroud)
要么
class Array
def rjust(n, x); Array.new([0, n-length].max, x)+self end
def ljust(n, x); dup.fill(x, length...n) end
end
Run Code Online (Sandbox Code Playgroud)
FWIW:
def rpad(item, padding, num)
Array(item).fill padding, Array(item).size, num
end
# rpad "initialize value(s)", 0, 3
# => ["initialize value(s)", 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10122 次 |
| 最近记录: |