6

次の 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
4

4 に答える 4

17
["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"]
于 2013-10-18T22:03:54.873 に答える
7

繰り返しを処理できる方法は次のとおりです。

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) }
于 2013-10-18T22:08:49.327 に答える
1
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"]
于 2013-10-20T02:31:22.823 に答える