【问题标题】:Ruby: sort an array exluding some symbolsRuby:对排除某些符号的数组进行排序
【发布时间】:2013-12-19 04:20:47
【问题描述】:

我有这样一个数组:["c", "-b", "a"]

["c", "-b", "a"].sort! 返回["-b", "a", "c"]

我希望它像["a", "-b", "c"]一样排序

如何从排序中排除减号? 最简单的获取方法是什么?

【问题讨论】:

    标签: ruby arrays sorting


    【解决方案1】:
    ["c", "-b", "a"].sort_by{|e| e[/\w+/] }
    # => ["a", "-b", "c"]
    

    【讨论】:

    • 很好,Arup。概括为忽略任何字符串开头的减号(但保留嵌入的):sort_by {|e| e.match(/(?:^-)?(.+)/)[1]}。我试图将其表达为e[/??/],但可以弄清楚如何。你(或其他人)能帮忙吗?
    • @CarySwoveland '-a-b'[/^-?(.+)$/,1] # => "a-b"
    • 更好:'-a-b'[/\w.*/] # => "a-b"
    • @Matt 非常非常Veryyyyyy 好!!
    • 谢谢*2,@马特。重新“更好”,适用于所有字符串(包括那些在开头减号后带有非\w 的字符串):'-:a-b'[/[^-].*/]
    【解决方案2】:

    这会忽略所有非字母数字符号,适用于任意长度的字符串:

    ["c", "-b", "a"].sort_by { |s| s.gsub(/\W/,'') }
    # => ["a", "-b", "c"] 
    

    【讨论】:

      【解决方案3】:

      这也有效,但sort_by 更直接:

      ["c", "-b", "a"].sort {|x,y| x[/\w+/] <=> y[/\w+/]} # => ["a", "-b", "c"] 
      

      编辑:更好,我认为:

      ["c", "-b", "a"].sort {|x,y| x[/[^-]+/] <=> y[/[^-]+/]}
      

      【讨论】:

        猜你喜欢
        • 2011-05-07
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-15
        • 1970-01-01
        • 2013-05-14
        相关资源
        最近更新 更多