首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ruby中对散列进行排序

在Ruby中对散列进行排序
EN

Stack Overflow用户
提问于 2014-03-14 01:28:07
回答 2查看 67关注 0票数 0

如果我有如下输入:

代码语言:javascript
复制
a b 703
o z 403
l p 550
d m 650

如何才能使列表按第二列排序。上面的列表应该打印出来

代码语言:javascript
复制
a b 703
d m 650
l p 550
o z 403

下面是我的代码,我认为我可以遍历第一列,然后按键对第二列进行排序,但它似乎不起作用。

代码语言:javascript
复制
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}"
 }
}

代码打印为原始代码。我真的很想使用散列来做这件事,因为我正在学习散列。

EN

Stack Overflow用户

发布于 2014-03-14 02:40:53

正如Sawa所说:--

代码语言:javascript
复制
lines = [
  "a b 703",
  "o z 403",
  "l p 550",
  "d m 650",
]

案例1:按第一列排序

代码语言:javascript
复制
lines.sort_by{|l| l.scan(/^[A-Za-z]/).first}

案例2:按第二列排序

代码语言:javascript
复制
lines.sort_by{|l| l.scan(/\W+[A-Za-z]/).first}

案例3:按降序排列的第3列

代码语言:javascript
复制
lines.sort_by{|l| l.scan(/\d+$/).first.to_i}.reverse
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22386345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档