给定哈希数组,按字母顺序排序,然后按数字排序

sa0irxe

我有一个带有 id 和 name 的哈希数组。名称可以有数字 + 字符串或只有字符串。目标是按字母顺序排序,如果名称中有数字,则按数字值排序。

鉴于:

array = [{id: "1", name: "Lorem 100"},
         {id: "2", name: "Lorem 101"}, 
         {id: "3", name: "Lorem 101-A"},   
         {id: "4", name: "Lorem 101-B"},  
         {id: "5", name: "Lorem 2"}, 
         {id: "6", name: "Ipsum (Lorems 55 & 55A)"},
         {id: "7", name: "Dolor"},
         {id: "8", name: "Sit"},
         {id: "9", name: "Amet"}]

排序如下:

sorted_array = [ {id: "9", name: "Amet"},
                 {id: "7", name: "Dolor"},
                 {id: "6", name: "Ipsum (Lorems 55 & 55A)"},
                 {id: "5", name: "Lorem 2"}, 
                 {id: "1", name: "Lorem 100"},
                 {id: "2", name: "Lorem 101"}, 
                 {id: "3", name: "Lorem 101-A"},   
                 {id: "4", name: "Lorem 101-B"},  
                 {id: "8", name: "Sit"}]

我试过的:

  1. array.sort_by { |散列| hash[:name] } -> 没有像我想要的那样排序,即 Lorem 100 将高于 Lorem 2
  2. array.sort_by { |散列| hash[:name][/\d+/].to_i } -> 给出错误,因为并非所有哈希都有数字

向这个伟大的社区寻求任何可以帮助我解决这个问题的资源或建议。谢谢!

阿马丹
array.sort_by { |hash|
  hash[:name].split(/(\d+)/).map.with_index { |part, index|
    index.odd? ? part.to_i : part
  }
}

使用连续数字作为分隔符拆分名称,使用捕获括号保留分隔符(请参阅String#split);然后将分隔符(即每个奇数元素)更改为整数,以便它们可以按数字而不是按字典顺序进行比较。因此,sort_by将比较诸如["Ipsum (Lorems ", 55, " & ", 55, "A)"]. Array#<=>做直观的事情,在哪里["Lorem ", 2]来之前["Lorem ", 101]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Java中按长度先对数组排序,然后按字母顺序对数组进行排序

PHP高级按数字先排序,然后按字母顺序排序

按数字然后按字母对数组列表进行排序

按数据属性(按字母顺序,然后按数字顺序)对列表项进行排序

MongoDB:按现有字段排序,然后按字母顺序排序

Postgres / ActiveRecord按字母排序,然后按数字排序?

按长度排序数组,然后按字母顺序排序

按字段对对象数组进行排序,然后按字母顺序排序

Python按降序排序字典,然后按字母顺序排序

按字母顺序排序下拉列表,然后按特定前缀排序

按字母顺序对字符数组进行排序,然后按长度排序

在同一列上按数字排序然后按字母数字排序

C-按计数排序,然后按字母顺序

如何在外壳脚本中按字母顺序对第二列进行排序,然后按数字排序?

熊猫value_counts:按值排序,然后按字母顺序排序?

MySQL-按多个单词排序,然后按字母顺序排序?

MySQL-如何按名称排序,然后按字母数字顺序在表上排序?

首先按字母顺序对列表进行排序,然后按数字对列表进行排序?

如何使用sort_by按字母顺序然后按数字顺序然后按特殊字符排序

我想按数字降序然后按字母顺序升序对字典进行排序

按值对Hashmap排序,然后按字母顺序排序

按字母顺序对数据表进行字母排序,然后按R中的数字值排序

如何先按字母然后按数字组合对字符串数组进行排序?

PHP中的二维数组的数字然后按字母顺序排序

按子数组类型值排序,然后按字母顺序排序

按自定义字段排序对象数组,然后按字母顺序

SQL如何用数字按字母顺序排序文本,然后按数字排序

如何先按字母然后按数字排序?

如何按字母顺序对 csv 数据进行排序,然后按列按数字排序?