ruby ऑब्जेक्ट्स का संग्रह क्रमबद्ध करके क्रमबद्ध करें(सबसे पहले सबसे पहले) तो पत्र(वर्णमाला) से




arrays sorting (3)

मैं ओलंपिक के लिए पदक की संख्या दिखाने के लिए एक विजेट का निर्माण कर रहा हूं। मेरे पास "देश" वस्तुओं का एक संग्रह है, जहां प्रत्येक में "नाम" विशेषता है, और पदक के लिए "सोने", "चांदी", "कांस्य"

सूची क्रमबद्ध की जानी चाहिए: 1. पहले कुल पदक गिनती में 2. यदि एक ही पदक, प्रकार (सोना> रजत> कांस्य, दो स्वर्ण पदक> 1 स्वर्ण + 1 रजत) के अनुसार उप-प्रकार 3. यदि एक ही पदक और प्रकार, उप वर्णक्रम के अनुसार

मैं यह रूबी में कर रहा हूँ, लेकिन मुझे लगता है कि भाषा कोई फर्क नहीं पड़ती। मैंने एक समाधान का पता लगाया है, लेकिन अगर ऐसा लगता है कि ऐसा करने के लिए एक बहुत अधिक आकर्षक तरीका होना चाहिए।

यहां मैंने जो किया है:

  1. भारित पदक कुल के साथ एक आभासी विशेषता बनाएँ इसलिए यदि उनके पास 2 सोना और 1 रजत है, तो भारित कुल "3.020100" होगा। 1 सोना और 1 रजत और 1 कांस्य "3.010101" होगा

  2. चूंकि हम पहले पदक के रूप में सर्वोच्च पद चाहते हैं, इसलिए सूची को डीईएससी को क्रमबद्ध किया गया है। लेकिन फिर हम उसके बाद वर्णानुक्रमिक रूप से उप-सॉर्ट करना चाहते हैं (यानी एएससी) इसलिए मैंने एक फ़ंक्शन बनाया जो अल्फ़ा-इनवर्ट एक शब्द (यानी "कनाडा" => "एक्सज़्ज़ज़्ज़") होगा

  3. भारित कुल को एक स्ट्रिंग में कनवर्ट करें, उलट नाम (यानी "3010101xzmzwz") दबाएं, फिर क्रमवार उतरते रहें। देखा।

अब तक, किसी ने सोचा है कि कोड की लगभग 2 लाइनों में एक ही चीज़ कैसे करें मुझे समझाने की देखभाल करें?


एक सरल विधि कुछ मनमाने ढंग से स्वरूपित स्ट्रिंग के साथ sort_by का उपयोग करना है, जैसे:

countries.sort_by do |c|
  "%010d-%010d-%010d-%s" % [ c.gold, c.silver, c.bronze, c.name ]
end

यह सभी देशों को एएससीआईआई क्रमबद्ध सूची में परिवर्तित करता है, जो संभवत: अपमानजनक 10 स्थानों पर जीते हुए पदकों की संख्या में पैड करता है। यदि कोई दस अरब से अधिक पदक जीतता है तो आपका कार्यक्रम खराब हो सकता है, लेकिन ऐसा लगता है कि उचित बाधा


countries.sort_by do |country|
  medals = country.gold + country.silver + country.bronze
  [-medals, -country.gold, -country.silver, country.name]
end

जावा में आप अपने ऑब्जेक्ट पर तुलनीय कार्यान्वित करेंगे और फिर इसे आसानी से एक सरणी या सरणी में हल किया जा सकता है। रूबी में एक तंत्र है जो बताता है कि आपके "देश" वस्तुओं की तुलना कैसे करें?







enumerable