如果我有如下输入:
a b 703
o z 403
l p 550
d m 650如何才能使列表按第二列排序。上面的列表应该打印出来
a b 703
d m 650
l p 550
o z 403下面是我的代码,我认为我可以遍历第一列,然后按键对第二列进行排序,但它似乎不起作用。
hash = {}
lines = file.readlines
lines.each{|line|
if line =~ /^([A-Za-z]+) ([A-Za-z]+) (\d+)$/
hash[$1.to_s] = {} if hash[$1.to_s] == nil
hash[$1.to_s][$2.to_s] = $3.to_i
end
}
hash.each{|k,v|
array = Hash[v.sort]
array.each{|x,y|
puts "#{k} #{x} #{y}"
}
}代码打印为原始代码。我真的很想使用散列来做这件事,因为我正在学习散列。
发布于 2014-03-14 02:40:53
正如Sawa所说:--
lines = [
"a b 703",
"o z 403",
"l p 550",
"d m 650",
]案例1:按第一列排序
lines.sort_by{|l| l.scan(/^[A-Za-z]/).first}案例2:按第二列排序
lines.sort_by{|l| l.scan(/\W+[A-Za-z]/).first}案例3:按降序排列的第3列
lines.sort_by{|l| l.scan(/\d+$/).first.to_i}.reversehttps://stackoverflow.com/questions/22386345
复制相似问题