elephant

赫本之后 再无女神

对hash进行递归操作

将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)