数组是
array = [[1],[2],[3],[0],[1,2],[1,0],[0,1]]
希望排序整个数组,先按照数组 元素个数 ,如果个数相同再 按照首个元素大小 。
array.sort_by {|a| [a.size, a[0]] }
>xxxxyyyyyyyyyyyy
你就把它变成
char_num#>xxxxx#yyyyyyyyyyyyyyyyyy
然后你就可以排序.
最后将它还原为原来的格式
以下是使用ruby的实现
file = File.open "fasta"
list = []
loop do
key = file.gets
value = file.gets
break if value == nil
line = value.size.to_s <<"#" <<key <<"#" <<value
#这里你自己没说清楚,到底序列是指
#>xxxxxx
#yyyyyyyyyyyyy还是指
#yyyyyyyyyyyyyy,所以自己修改,我默认为下一种
list.push line
end
list.sort! #恩,这里有些问题,国内的ruby少的可怜。而我又没有ruby的帮助文档。这里需要修改一下sort的这个算法。因为ruby默认是按照ascii顺序排列的。所以5反而在10的后面。还有另一种方法是使用linux的sort工具 sort -n 可以实现按数字排序,但是中间要生成临时文件,自己实现。
tmpfile =File.open "fasta.tmp", "w"
list.each { |elem| tmp_list = elem.splist ( /#/ )tmpfile.puts tmp_list[1], tmp_list[2]}
#system "mv fasta.tmp fasta"这句等你确认算法是对的再来执行吧