আমি কীভাবে হ্যাশের একটি মান দ্বারা হ্যাশগুলির একটি অ্যারে বাছাই করব?


119

এই রুবি কোডটি আমার প্রত্যাশা মতো আচরণ করছে না:

# create an array of hashes
sort_me = []
sort_me.push({"value"=>1, "name"=>"a"})
sort_me.push({"value"=>3, "name"=>"c"})
sort_me.push({"value"=>2, "name"=>"b"})

# sort
sort_me.sort_by { |k| k["value"]}

# same order as above!
puts sort_me

আমি কী "মান" কী দ্বারা হ্যাশগুলির অ্যারে বাছাই করতে দেখছি, তবে সেগুলি ছাঁটাই না করা হয়েছে।

উত্তর:


214

রুবি এর sortজায়গায় সাজান না। (আপনার কি পাইথনের পটভূমি রয়েছে, সম্ভবত?)

রুবি -কে sort!ইন-প্লেস বাছাইয়ের জন্য রয়েছে, তবে sort_byরুবি ১.৮ -তে কোনও স্থানের স্থান নেই । অনুশীলনে, আপনি এটি করতে পারেন:

sorted = sort_me.sort_by { |k| k["value"] }
puts sorted

রুবি ১.৯++ অনুসারে, .sort_by!স্থানের স্থান বাছাইয়ের জন্য উপলব্ধ:

sort_me.sort_by! { |k| k["value"]}

28
আসলে, Array#sort_by!রুবি ১.৯.২-এ নতুন। আমার backportsরত্নটিকে খুব প্রয়োজনীয় করেও আজ সকল রুবি সংস্করণে উপলভ্য :-)
মার্ক-আন্দ্রে লাফোর্টুন

হাই, অ্যান্ড্রিং অর্ডারে বাছাই করার কোনও উপায় আছে কি? আমি বুঝতে পারি আমি যেতে চাই 3,2,1...
tekknolagi

2
আপনি এটি দিয়ে তা করতে পারবেন না sort_by, তবে কেবল অপারেশনগুলি ব্যবহার করুন sortবা sort!সহজেই সরিয়ে ফেলুন : a.sort! {|x,y| y <=> x }( রুবি- ডক.আর.অর্গ / কোরআর ৯..3 /১ / অ্যারেএইচটিএমএল# মেমোডি- আইসোর্ট )
কোচেন

1
বা:puts sorted = sort_me.sort_by{ |k,v| v }
জাজ

9
@ টেক্কনোলগি: শুধু সংযোজন করুন .reverse
জাজ

21

@ শটিফ অনুসারে তবে sort!প্রস্তাবিত রূপের সাথে প্রয়োগ করা হয়েছে:

sort_me.sort! { |x, y| x["value"] <=> y["value"] }

7

যদিও রুবির কোনও sort_byস্থানের বৈকল্পিক না থাকলে আপনি এটি করতে পারেন:

sort_me = sort_me.sort_by { |k| k["value"] }

Array.sort_by! 1.9.2 এ যুক্ত হয়েছিল in


1
এই "অ্যারে.সোর্ট_বাই! ১.৯.২" যোগ করা হয়েছিল উত্তরটি আমার পক্ষে কাজ করেছে
ওয়েব স্পাইডার 26

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.