我已经创建了一个“自然排序宝石”(natural sort gem)的GitHub项目。它可以按照属性进行排序,如下所示:
natural sort gem。
# Sort an array of objects by the 'number' attribute
Thing = Struct.new(:number, :name)
objects = [
Thing.new('1.1', 'color'),
Thing.new('1.2', 'size'),
Thing.new('1.1.1', 'opacity'),
Thing.new('1.1.2', 'lightness'),
Thing.new('1.10', 'hardness'),
Thing.new('2.1', 'weight'),
Thing.new('1.3', 'shape')
]
Naturally.sort_by(objects, :number)
# => [#<struct Thing number="1.1", name="color">,
#<struct Thing number="1.1.1", name="opacity">,
#<struct Thing number="1.1.2", name="lightness">,
#<struct Thing number="1.2", name="size">,
#<struct Thing number="1.3", name="shape">,
#<struct Thing number="1.10", name="hardness">,
#<struct Thing number="2.1", name="weight">]
\s
添加到第一个正则表达式匹配器中,像这样:irb(main):021:0> "Filename 10".scan(/[^\s\d\.]+|[\d\.]+/)
会产生=> ["Filename", "10"]
。否则,我看到irb(main):020:0> "Filename 10".scan(/[^\d\.]+|[\d\.]+/)
会产生=> ["Filename ", "10"]
(请注意 "Filename" 后面的空格)。 - cdmo