首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Ruby按组自定义排序数组

使用Ruby按组自定义排序数组
EN

Stack Overflow用户
提问于 2017-07-20 06:49:26
回答 4查看 760关注 0票数 2

请你帮忙。我有3组值的input_array。

我需要的团体命令是:

代码语言:javascript
复制
1st group: Pou
2nd group: Apl
3rd group: Gab

这个顺序已经在input_array中完成了,但是我想对每个组进行排序。

到目前为止,我的脚本产生了下表的中央列(当前输出)中给出的输出。

代码语言:javascript
复制
input_arr = ["Pou-12","Pou-7","Pou-4","Pou-8","Pou-9","Pou-11","Pou-10","Pou-3","Pou-2","Pou-1","Pou-6","Pou-5","Apl","Gab-3","Gab-5","Gab-4","Gab-1","Gab-2"] 

b=input_arr.sort_by do |s|
  if s =~ /^\d+$/
      [2, $&.to_i]
  else
      [1, s]
  end
end

puts b

下面也显示了所需的排序输出数组。

代码语言:javascript
复制
 input array  | current output | desired output array
代码语言:javascript
复制
    Pou-12    |     Apl        |      Pou-1
    Pou-7     |     Gab-1      |      Pou-2
    Pou-4     |     Gab-2      |      Pou-3
    Pou-8     |     Gab-3      |      Pou-4
    Pou-9     |     Gab-4      |      Pou-5
    Pou-11    |     Gab-5      |      Pou-6
    Pou-10    |     Pou-1      |      Pou-7
    Pou-3     |     Pou-10     |      Pou-8
    Pou-2     |     Pou-11     |      Pou-9
    Pou-1     |     Pou-12     |      Pou-10
    Pou-6     |     Pou-2      |      Pou-11
    Pou-5     |     Pou-3      |      Pou-12
    Apl       |     Pou-4      |      Apl
    Gab-3     |     Pou-5      |      Gab-1
    Gab-5     |     Pou-6      |      Gab-2
    Gab-4     |     Pou-7      |      Gab-3
    Gab-1     |     Pou-8      |      Gab-4
    Gab-2     |     Pou-9      |      Gab-5

更新

用数组代替哈希的解决方案。

代码语言:javascript
复制
a = ["Pou-7","Pou-4","Gab-4","Pou-8","Pou-9","Pou-11","Pou-10","Pou-3","Pou-2","Pou-1","Pou-6","Pou-5","Apl","Gab-3","Gab-5","Gab-1","Pou-12","Gab-2"]
order = [ "Pou", "Apl", "Gab" ]

a.map{ |s| head,tail = s.split("-"); [order.index(head), tail.to_i, s]}.sort.map(&:last)

=> ["Pou-1", "Pou-2", "Pou-3", "Pou-4", "Pou-5", "Pou-6", "Pou-7", "Pou-8", "Pou-9", 
"Pou-10", "Pou-11", "Pou-12", "Apl", "Gab-1", "Gab-2", "Gab-3", "Gab-4", "Gab-5"]
EN

Stack Overflow用户

发布于 2017-07-20 07:03:40

你可以试试这个:

代码语言:javascript
复制
b = input_arr.group_by { |e| e.split("-")[0] }
b = b.flat_map { |k, v| v.sort_by!{ |vs| vs.split("-")[1].to_i }; v }
票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45207235

复制
相关文章

相似问题

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