ruby HASH, 正则, 数组

长时间不用经常忘记, 还是总结下常用的, 每次总结自己用到的小例子

文件名排序

描述: 文件名包含两段 num1_num2.jpg, 在文件浏览器看到的顺序和find 命令得到的文件顺序不一致, 因此希望通过脚本修改.
这里主要展示 hash 排序

lines = File.open(forg_list).readlines

mp={}
lines.each do |line|
    line =~ /^(\d+)_(\d+)/
    #puts $1, $2
    mp[$1] = {} unless mp.has_key? $1
    v2=$2

    #puts v2, "%02d"%v2
    #exit
    mp[$1]["%02d"%v2]=v2
end

File.open(flist, "w") do |fp|
    mp.each do |k1, v1| 
        v1 = v1.sort { |k, v| k.first <=> v.first }.to_h
        v1.each do |k2, v2| 
            fp.puts "#{k1}_#{v2}.jpg"
        end
    end 
end

方法二:
https://stackoverflow.com/questions/51341134/how-to-sort-file-names-in-ruby

pics = pics.sort_by do |name|
           name =~ /\/(\d+)\.jpg/
           $1.to_i
           # 其实可以返回一个数组, 只要第一个是inter就行
       end

你可能感兴趣的:(ruby)