将hash {a:1,b:{c1:2,c2:3,c3:{d1:4,d2:5},e:6}}转化为下面字符串
a = 1 , b_c1 = 2 , b_c2 = 3 , b_c3_d1 = 4 , b_c3_d2 = 5 , b_e = 6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| hash = {a:1,b:{c1:2,c2:3,c3:{d1:4,d2:5},e:6}}
def unfold(hash,p="")
arr = []
hash.each do|k,v|
if v.instance_of? Hash
arr += unfold(v,p+k.to_s+"_")
else
arr << "#{p}#{k.to_s} = #{v.to_s}"
end
end
arr
end
puts unfold(hash).join " , "
|
递归操作一般用于将问题复杂度降低,但感觉ruby的栈使递归无法发挥,稍微大点的递归就会导致栈溢出,之前写的递归版本的插入排序,同样的思路在java/java/c#都很好用,但在ruby中就是不行,要么调整栈的大小,但运行缓慢,很多时候总是得换为循环,感觉应该不是算法的问题,不知道什么时候ruby才能解决这个问题
之前写的插入排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| def insertSort(left=[],arr)
return left unless (x=arr.pop)
left.each_with_index do |l,i|
if l>x
left.insert i,x
return insertSort left,arr
end
end
left.push x
return insertSort left,arr
end
arr=[]
arrE=(1..10000).to_a
10000.times do |t|
tmp=rand(arrE.count)
arr.push (arrE.delete_at tmp)
end
puts (insertSort arr)
|