【问题标题】:Sort Ruby Array of Clothing Sizes对衣服尺寸的 Ruby 数组进行排序
【发布时间】:2013-10-18 22:00:51
【问题描述】:

给定以下 ruby​​ 数组:

["2XL", "3XL", "4XL", "5XL", "6XL", "L", "M", "S", "XL"]

如何对其进行排序以使其按此顺序排列?

["S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL", "6XL"]

请注意,每个尺寸并不总是存在

为了历史,这是我最初的实现。

sorted_sizes = []

sorted_sizes << "S" if sizes.include?("S")
sorted_sizes << "M" if sizes.include?("M")
sorted_sizes << "L" if sizes.include?("L")
sorted_sizes << "XL" if sizes.include?("XL")
sorted_sizes << "2XL" if sizes.include?("2XL")
sorted_sizes << "3XL" if sizes.include?("3XL")
sorted_sizes << "4XL" if sizes.include?("4XL")
sorted_sizes << "5XL" if sizes.include?("5XL")
sorted_sizes << "6XL" if sizes.include?("6XL")

sorted_sizes

【问题讨论】:

  • 如果不是每个尺寸都始终存在,您是否希望它出现在排序后的数组中?
  • @squiguy,不,我不希望排序后的数组的值不存在于正在排序的数组中。
  • 您的解决方案建议要排序的数组从不包含重复项,或者排序后的数组不包含重复项。正确的?请注意,“sort_by”解决方案将包含要在已排序数组中排序的数组中的重复项,而 @sawa 的解决方案不会。

标签: ruby sorting


【解决方案1】:
["S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL", "6XL"] & ["2XL", "3XL", "4XL", "5XL", "6XL", "L", "M", "S", "XL"]
# => ["S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL", "6XL"]

【讨论】:

  • 这真是太聪明了!
  • 不考虑重复。
【解决方案2】:

这是一种可以处理重复的方法:

SORT_ORDER = ["S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL", "6XL"]

["2XL", "3XL", "4XL", "5XL",
 "6XL", "L", "M", "S", "XL"].sort_by { |x| SORT_ORDER.index(x) }

【讨论】:

    【解决方案3】:

    我真的很喜欢 @nicooga 的版本来解决这个问题,我只是建议将逻辑包装在 lambda 中。这样它就可以在整个代码的许多地方使用。

    clothing_size = ->x{%w(S M L XL 2XL 3XL 4XL 5XL 6XL).index(x)}
    
    size_list = ["2XL", "3XL", "4XL", "5XL", "6XL", "L", "M", "S", "XL"]
    
    size_list.sort_by &clothing_size
    

    【讨论】:

      【解决方案4】:
      array = ["2XL", "3XL", "4XL", "6XL", "L", "M", "S", "XL"] 
      sort_order = ["S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL", "6XL"]
      
      sort_order - (sort_order - array)
        # => ["S", "M", "L", "XL", "2XL", "3XL", "4XL", "6XL"]
      

      【讨论】:

        猜你喜欢
        • 2020-12-08
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多