2010-03-10 16 views
10

कोको NSDictionary प्रदान करता है, जो अनिवार्य रूप से एक सहयोगी सरणी है।बिडरेक्शनल मानचित्र

क्या बिडरेक्शनल साझेदारी प्राप्त करने का कोई अच्छा तरीका है? यानी एक तरीका होता अगर NSDictionary में keyForObject: विधि होती है जो objectForKey: के व्यवहार को प्रतिबिंबित करती है।

मुझे वास्तव में परवाह नहीं है अगर NSDictionary इसे प्राप्त करने का तरीका नहीं है। मुझे पता है कि NSDictionary keysOfEntriesPassingTest: प्रदान करता है लेकिन यह NSSet * देता है जो कि मैं जिस तरह की चीज़ चाहता हूं उसके लिए बहुत साफ नहीं दिखता है।

fieldMap = [[NSDictionary alloc] initWithObjectsAndKeys: 
    @"c0",@"synckey", 
    @"c1",@"wi_id", 
    @"c2",@"wi_parent_id", 
    @"c3",@"wi_type", 
    @"c4",@"wi_rh_task", 
    @"c5",@"decision_key", 
    @"c6",@"wi_stat", 
    @"c7",@"wi_prio", 
    @"c8",@"wi_cd", 
    @"c9",@"wi_ct", 
    @"cb",@"wi_dh_stat", 
    @"cc",@"wi_user", 
    nil]; 

मैं अन्य क्षेत्रों के लिए c0 और और वापस डिट्टो के बीच synckey, और अनुवाद करना चाहते हैं:

यहाँ एक उदाहरण है।

उत्तर

8

CHDataStructures ढांचे में CHBidirectionalDictionary है।

+0

सीएचडीटा संरचनाओं में कई अन्य सामान भी उपयोगी हैं। मैं आगे बढ़ने जा रहा हूं और इसे शामिल कर रहा हूं। – ArjunShankar

10

आपके बाद के लिए सबसे नज़दीकी चीज है, मुझे विश्वास है कि allKeysForObject: है। यह एक एनएसएआरआरए देता है जिसमें शब्दकोश में किसी दिए गए ऑब्जेक्ट की सभी घटनाओं के अनुरूप कुंजी होती है। जाहिर है यदि वस्तु केवल एक बार शब्दकोश में है, तो एनएसएआरएआरई में केवल एक वस्तु होगी।

fieldMap = [[NSDictionary alloc] initWithObjectsAndKeys: 
    @"c0",@"synckey", 
    @"c1",@"wi_id", 
    @"c2",@"wi_parent_id", 
    @"c3",@"wi_type", 
    @"c4",@"wi_rh_task", 
    @"c5",@"decision_key", 
    @"c6",@"wi_stat", 
    @"c7",@"wi_prio", 
    @"c8",@"wi_cd", 
    @"c9",@"wi_ct", 
    @"cb",@"wi_dh_stat", 
    @"cc",@"wi_user", 
    nil]; 

इस अतिरिक्त कोड 1 स्ट्रिंग वस्तु का मूल्यांकन युक्त एक सरणी वापस होगा @ "सी 7" के लिए:

NSArray *keyArray = [fieldMap allKeysForObject:@"wi_prio"]; 

[एक तरफ:

अपने उदाहरण के साथ

तो ध्यान दें कि यह होगा ही काम यहां संकलक कैसे काम करता है; यह @ "wi_prio" के सभी अवसरों को लेता है और उन्हें एक ही वस्तु बनाता है। यदि इसके बजाय आपने डिस्क आदि से शब्दकोश को लोड किया था, तो यह दृष्टिकोण एनएसएसटींग्स ​​के लिए काम नहीं करेगा। इसके बजाय आपको शायद allKeys का उपयोग करना चाहिए और फिर [mystring isEqualToString:anotherString] की तुलना में उनके माध्यम से पुनरावृत्त करना चाहिए।]

संबंधित मुद्दे