今天,有个同事提到了把一个一维数组转化为二维数组的算法。他用了两个循环,一个用来初始化结果数组,一个用来把原数组的值填充到结果数组。我觉得,只需一个循环就可以了,说白了,这个转换就是一个映射,就是把一个一维坐标映射为一个二维坐标。
算法:
更ruby一点的实现:
更优雅的,也许是有些风险的:
算法:
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