排序Ruby数组的服装尺寸

sil*_*son 6 ruby sorting

给出以下ruby数组:

["2XL", "3XL", "4XL", "5XL", "6XL", "L", "M", "S", "XL"]
Run Code Online (Sandbox Code Playgroud)

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

["S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL", "6XL"]
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)

saw*_*awa 15

["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"]
Run Code Online (Sandbox Code Playgroud)

  • 不考虑重复. (5认同)
  • 我确保值是uniq,所以这是有效的. (4认同)
  • 那非常聪明! (3认同)

nic*_*oga 6

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

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) }
Run Code Online (Sandbox Code Playgroud)