कस्टम समानता का अर्थ
डोमेन के अनुरूप समानता के नियम लागू कीजिए।
कस्टम समानता का अर्थ, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
डिफ़ॉल्ट == कब गलत होता है
संश्लेषित == हर संग्रहीत गुणधर्म की तुलना करता है। कभी-कभी यह बहुत सख्त होता है (आपको केवल पहचानकर्ता की परवाह होती है) या बहुत ढीला। तब आपको == स्वयं लिखना पड़ता है।
पहचान-आधारित समानता
जब दो रिकॉर्ड के पहचानकर्ता समान हों, तो अन्य फ़ील्ड को अनदेखा करके उन्हें समान मानें:
struct Account: Equatable {
let id: Int
var balance: Int
static func == (l: Account, r: Account) -> Bool { l.id == r.id }
}
print(Account(id: 1, balance: 10) == Account(id: 1, balance: 999)) // trueअक्षर-रूप से स्वतंत्र समानता
तुलना करने से पहले मानों को सामान्यीकृत करें:
struct Username: Equatable {
let raw: String
static func == (l: Username, r: Username) -> Bool {
l.raw.lowercased() == r.raw.lowercased()
}
}
print(Username(raw: "Ann") == Username(raw: "ANN")) // trueHashable को संगत रखें
यदि आप == को अनुकूलित करते हैं, तो समान फ़ील्ड का उपयोग करने के लिए hash(into:) को भी MUST अपडेट करें, वरना समान मानों के हैश अलग हो सकते हैं और सेट टूट सकते हैं।
== और hash(into:) का मिलान
दोनों केवल id का उपयोग करते हैं, इसलिए संगत रहते हैं:
struct User: Hashable {
let id: Int
var name: String
static func == (l: User, r: User) -> Bool { l.id == r.id }
func hash(into h: inout Hasher) { h.combine(id) }
}
print(Set([User(id: 1, name: "A"), User(id: 1, name: "B")]).count) // 1कैश को अनदेखा करने वाली समानता
व्युत्पन्न या कैश किए गए फ़ील्ड को तुलना से बाहर रखें:
struct Doc: Equatable {
let text: String
var cachedWordCount: Int
static func == (l: Doc, r: Doc) -> Bool { l.text == r.text }
}
let a = Doc(text: "hi", cachedWordCount: 1)
let b = Doc(text: "hi", cachedWordCount: 999)
print(a == b) // trueसहनशील फ़्लोटिंग-पॉइंट समानता
डबल मानों की सटीक तुलना करने के बजाय, एप्सिलॉन के भीतर उनकी तुलना करें:
struct Measure: Equatable {
let value: Double
static func == (l: Measure, r: Measure) -> Bool {
abs(l.value - r.value) < 0.0001
}
}
print(Measure(value: 0.1 + 0.2) == Measure(value: 0.3)) // trueफ़ील्ड के उपसमुच्चय में समानता
डोमेन की समानता के लिए अर्थपूर्ण फ़ील्ड के उपसमुच्चय की तुलना करें:
struct Card: Equatable {
let rank: Int
let suit: String
let isFaceUp: Bool // display state, not identity
static func == (l: Card, r: Card) -> Bool {
l.rank == r.rank && l.suit == r.suit
}
}
print(Card(rank: 1, suit: "H", isFaceUp: true) == Card(rank: 1, suit: "H", isFaceUp: false)) // trueEquatable के नियमों का पालन करें
अनुकूलित == को आत्म-प्रतिवर्ती (a == a), सममित (a == b से b == a का तात्पर्य) और संक्रामक रहना चाहिए। इनका उल्लंघन संग्रहों और एल्गोरिदम को भ्रमित करता है।
एक सममित कार्यान्वयन
सामान्यीकृत रूपों की तुलना करने से सममिति बनी रहती है:
struct Email: Equatable {
let address: String
static func == (l: Email, r: Email) -> Bool {
l.address.lowercased() == r.address.lowercased()
}
}
let x = Email(address: "A@x.com")
let y = Email(address: "a@X.com")
print(x == y, y == x) // true trueSet में अनुकूलित समानता
क्योंकि केवल id वाली समानता और हैशिंग एक-दूसरे से सहमत हैं, इसलिए Set समान id वाले मानों को एक ही मानता है:
struct Item: Hashable {
let id: Int
var note: String
static func == (l: Item, r: Item) -> Bool { l.id == r.id }
func hash(into h: inout Hasher) { h.combine(id) }
}
let s: Set<Item> = [Item(id: 1, note: "x"), Item(id: 1, note: "y")]
print(s.count) // 1त्वरित जाँच
कुछ ही फ़ील्ड का उपयोग करने वाला अनुकूलित == लिखने के बाद आपको और क्या करना चाहिए?
पुनरावलोकन
आपने अनुकूलित समानता सीखी:
- जब डिफ़ॉल्ट संपूर्ण-संरचना तुलना गलत हो, तब अपना
==लिखें - सामान्य मामले: केवल id, अक्षर-रूप से स्वतंत्र तुलना, एप्सिलॉन वाले फ़्लोट, कैश को अनदेखा करना
- उन्हीं फ़ील्ड के साथ
hash(into:)को संगत रखें - आत्म-प्रतिवर्ती, सममित और संक्रामक रहें
पाठ्यक्रम पूरा हुआ! अगला विषय: CustomStringConvertible और Mirror।
एआई शिक्षक के साथ Swift सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 122
- पाठ
- 409
अक्सर पूछे जाने वाले प्रश्न
क्या “कस्टम समानता का अर्थ” पाठ निःशुल्क है?
हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कस्टम समानता का अर्थ” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कस्टम समानता का अर्थ” में मैं क्या सीखूँगा?
डोमेन के अनुरूप समानता के नियम लागू कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“कस्टम समानता का अर्थ” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- संश्लेषित Equatable
- Hashable और hash(into:)
- Comparable और क्रमबद्ध करना
- कस्टम समानता का अर्थ