把一个一维数组转化成二维数组的算法

今天,有个同事提到了把一个一维数组转化为二维数组的算法。他用了两个循环,一个用来初始化结果数组,一个用来把原数组的值填充到结果数组。我觉得,只需一个循环就可以了,说白了,这个转换就是一个映射,就是把一个一维坐标映射为一个二维坐标。
算法:

def div_arr(src_arr,div_len)
if div_len >= src_arr.size
src_arr
end

row_index = -1
result_arr = []

src_arr.each_index{ |i|

column_index = i % div_len
if column_index == 0
row_index += 1
result_arr[row_index] = []
end

result_arr[row_index][column_index] = src_arr[i]
}

result_arr

end


更ruby一点的实现:

def div_arr(arr, div_len)

if div_len <= 0 or div_len == 1 or div_len >= arr.size
return [arr]
end

res = []
arr.each_index{ |i|
x,y = i / div_len,i % div_len

res[x] = [] if not res[x]
res[x][y] = arr[i]
}

res

end

更优雅的,也许是有些风险的:

class Array
def div(len)
if len <= 1 or len >= self.size
return [self]
end

res=[]

self.each_index{ |i|
x,y = i / len, i % len
res[x] = [] if not res[x]
res[x][y] = self[i]
}

res
end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值