Sort an array of arrays based on the order in another array

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

I have an array of arrays:

x = [
  ["ready", 5], ["shipped", 1], ["pending", 1], ["refunded", 1],
  ["delivered", 23], ["scheduled", 1], ["canceled", 51]
]

My sorting array is

order_array = [
  "ready", "in_progress", "recieved", "shipped", "scheduled", "pick_up",
 "delivered", "canceled", "failed", "refunded", "refund_failed"
]

I need to order x based on the value of the first element in each subarray. The required sorted array is:

[
  ["ready", 5], ["shipped", 1], ["scheduled", 1], ["delivered", 23],
  ["canceled", 51], ["refunded", 1]
]

Using sort_by doesn't result in the required sorting, it leads to the same array.

result = x.sort_by {|u| order_array.index(u)}
# => [
#      ["ready", 5], ["shipped", 1], ["pending", 1], ["refunded", 1],
#      ["delivered", 23], ["scheduled", 1], ["canceled", 51]
# ]

 

profilepic.png
manpreet 2 years ago
h = x.to_h
# => {"ready"=>href="https://forum.tuteehub.com/tag/5">5,
# "shipped"=>href="https://forum.tuteehub.com/tag/1">1,
# "pending"=>href="https://forum.tuteehub.com/tag/1">1,
# "refunded"=>href="https://forum.tuteehub.com/tag/1">1,
# "delivered"=>23,
# "scheduled"=>href="https://forum.tuteehub.com/tag/1">1,
# "canceled"=>href="https://forum.tuteehub.com/tag/5">5href="https://forum.tuteehub.com/tag/1">1}

order_array.map{|href="https://forum.tuteehub.com/tag/key">key| [href="https://forum.tuteehub.com/tag/key">key, h[href="https://forum.tuteehub.com/tag/key">key]] if h.href="https://forum.tuteehub.com/tag/key">key?(href="https://forum.tuteehub.com/tag/key">key)}.compact
# => [["ready", href="https://forum.tuteehub.com/tag/5">5],
# ["shipped", href="https://forum.tuteehub.com/tag/1">1],
# ["scheduled", href="https://forum.tuteehub.com/tag/1">1],
# ["delivered", 23],
# ["canceled", href="https://forum.tuteehub.com/tag/5">5href="https://forum.tuteehub.com/tag/1">1],
# ["refunded", 1]]

or

h = x.to_h{|k, v| [k, [k, v]]}
#=> {"ready"=>["ready", href="https://forum.tuteehub.com/tag/5">5],
# "shipped"=>["shipped", href="https://forum.tuteehub.com/tag/1">1],
# "pending"=>["pending", href="https://forum.tuteehub.com/tag/1">1],
# "refunded"=>["refunded", href="https://forum.tuteehub.com/tag/1">1],
# "delivered"=>["delivered", 23],
# "scheduled"=>["scheduled", href="https://forum.tuteehub.com/tag/1">1],
# "canceled"=>["canceled", href="https://forum.tuteehub.com/tag/5">5href="https://forum.tuteehub.com/tag/1">1]}

order_array.map{|k| h[k]}.compact
#=> [["ready", href="https://forum.tuteehub.com/tag/5">5],
# ["shipped", href="https://forum.tuteehub.com/tag/1">1],
# ["scheduled", href="https://forum.tuteehub.com/tag/1">1],
# ["delivered", 23],
# ["canceled", href="https://forum.tuteehub.com/tag/5">5href="https://forum.tuteehub.com/tag/1">1],
# ["refunded", href="https://forum.tuteehub.com/tag/1">1]]

or

 

h = x.to_h{|k, v| [k, [k, v]]}
#=> {"ready"=>["ready", href="https://forum.tuteehub.com/tag/5">5],
# "shipped"=>["shipped", href="https://forum.tuteehub.com/tag/1">1],
# "pending"=>["pending", href="https://forum.tuteehub.com/tag/1">1],
# "refunded"=>["refunded", href="https://forum.tuteehub.com/tag/1">1],
# "delivered"=>["delivered", 23],
# "scheduled"=>["scheduled", href="https://forum.tuteehub.com/tag/1">1],
# "canceled"=>["canceled", href="https://forum.tuteehub.com/tag/5">5href="https://forum.tuteehub.com/tag/1">1]}

h.values_at(*order_array).compact
#=> [["ready", href="https://forum.tuteehub.com/tag/5">5],
# ["shipped", href="https://forum.tuteehub.com/tag/1">1],
# ["scheduled", href="https://forum.tuteehub.com/tag/1">1],
# ["delivered", 23],
# ["canceled", href="https://forum.tuteehub.com/tag/5">5href="https://forum.tuteehub.com/tag/1">1],
# ["refunded", 1]]


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.