【问题标题】:How to sort an Array of Arrays in Ruby where the first elements is a String如何在Ruby中对第一个元素是字符串的数组进行排序
【发布时间】:2015-03-25 20:30:56
【问题描述】:

问题是如何对具有以下结构的数组进行排序:

status = 
 [["Wartend", :pending],
  ["Schufa Check", :schufa_check],
  ["Schufa Key existiert", :schufa_person_key_exists],
  ["LottoIdent", :lotto_ident],
  ["IBAN existiert", :iban_exists],
  ["E-Mail Bestätigung", :email_validation],
  ["SMS Bestätigung", :mobile_validation],
  ["Aktiv", :active],
  ["gesperrt", :locked],
  ["ausgeschlossen", :locked_out],
  ["werden gelöscht", :marked_for_deletion]]

结果应该是这样的:

[["Aktiv", :active], 
 ["ausgeschlossen", :locked_out], 
 ["E-Mail Bestätigung", :email_validation], 
 ["gesperrt", :locked], 
 ["IBAN existiert", :iban_exists], 
 ["LottoIdent", :lotto_ident], 
 ["Schufa Check", :schufa_check], 
 ["Schufa Key existiert", :schufa_person_key_exists], 
 ["SMS Bestätigung", :mobile_validation], 
 ["Wartend", :pending], 
 ["werden gelöscht", :marked_for_deletion]]

【问题讨论】:

    标签: ruby arrays sorting


    【解决方案1】:
    p status.sort_by{|ar| ar.first.downcase}
    # =>[["Aktiv", :active], ["ausgeschlossen", :locked_out], ["E-Mail Bestätigung", :email_validation], ["gesperrt", :locked], ["IBAN existiert", :iban_exists], ["LottoIdent", :lotto_ident], ["Schufa Check", :schufa_check], ["Schufa Key existiert", :schufa_person_key_exists], ["SMS Bestätigung", :mobile_validation], ["Wartend", :pending], ["werden gelöscht", :marked_for_deletion]]
    

    【讨论】:

      【解决方案2】:

      一个常见的错误是忘记了字符串(在每个数组中a[0] 的位置)是大写还是小写。自然,排序会产生如下结果:

       "Aktiv",  
       "E-Mail Bestätigung",  
       "IBAN existiert",  
       "LottoIdent",  
       ...,  
       "SMS Bestätigung",  
       "ausgeschlossen",    
       "gesperrt"  
      

      因此解决方案是使用带有块的常见 Ruby 排序方法,并将位置 a[0] 的值小写:

      status.sort{|x,y| x[0].downcase <=> y[0].downcase}
      

      【讨论】:

      • status.sort_by{|x| x[0].downcase}
      • 是否有一个额外的标志可以用来确定它是升序还是降序
      猜你喜欢
      • 2015-10-04
      • 1970-01-01
      • 2015-09-17
      • 2021-07-12
      • 2013-05-14
      • 1970-01-01
      • 2015-11-11
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多