2012-11-15 14 views
5

मैं निष्पादित कोड NSLog(@"%@", arrData); और डीबगर में उत्पादन निम्नलिखित इतना तरह की उम्मीद थी:NSLog के रूप में एक ही क्रम में पाश पुनरावृति के लिए बनाने के लिए (@ "% @", arrData)

"0." =  { 
"first_name"="John" 
    }; 

    "1." =  { 
"first_name"="Florence" 
    }; 

    "2." =  { 
"first_name"="Melinda" 
    }; 
    "3." =  { 
"first_name"="Zack" 
    }; 

मैं तो इस कोड को निष्पादित:

for (NSDictionary *book in arrData) 
{ 
     NSLog(@"%@ %@" , book, [[arrData objectForKey:book] objectForKey:@"first_name"]); 
} 

और उत्पादन इतना की तरह था:

2. Melinda 
0. John 
3. Zack 
1. Florence 

मैं पाश के लिए प्रिंट कैसे कर सकता हूँ परिणाम के रूप में एक ही क्रम में परिणाम? NSLog(@"%@", arrData);

+4

आप नहीं करते हैं। एनएस डिक्शनरी में प्रविष्टियां अनियंत्रित हैं, और एक ही क्रम में दो बार एक ही क्रम में वापस नहीं आ सकती हैं। यदि आप उन्हें आदेश देना चाहते हैं, तो डेटा को सरणी में रखें और जिस तरह से आप चाहते हैं उसे सॉर्ट करें। (संकेत: कुंजी की सूची पुनर्प्राप्त करें, उन्हें जिस तरह से आप चाहते हैं उसे क्रमबद्ध करें, फिर सूचकांक मानों को पुनर्प्राप्त करने के लिए उस सूची के माध्यम से कार्य करें।) –

+0

यहां आपका उत्तर है: http://stackoverflow.com/questions/8360100/nsmutabledictionary- अलग- प्रिंट-से-कंसोल-एंड-कोड –

+0

हॉट हॉट्स ने क्या कहा। आप एक अनियंत्रित संग्रह की गणना नहीं कर सकते हैं और एक विशिष्ट क्रम में वस्तुओं पर काम करने की उम्मीद कर सकते हैं। @ हॉटलिक्स आपको इसे एक उत्तर के रूप में रखना चाहिए। – Metabble

उत्तर

8

कुछ चीजें यहां चल रही हैं।

सबसे पहले समझें कि %@ का अर्थ एनएसएलओजी में है। कई आईओएस/कोको डेवलपर्स गलत मानते हैं %@ एनएसएसटींग से जुड़ा हुआ है, यह नहीं है। Apple's documentation से:

ऑब्जेक्टिव-सी वस्तु है, स्ट्रिंग descriptionWithLocale: द्वारा लौटाए यदि उपलब्ध हो, या विवरण अन्यथा के रूप में मुद्रित। ऑब्जेक्ट्स के साथ भी काम करता है, CFCopyDescription फ़ंक्शन का परिणाम लौटाता है।

तो, %@ कोई उद्देश्य-सी या CFTypeRef ऑब्जेक्ट लेता है। चूंकि आप NSDictionary का उपयोग कर रहे हैं, %@ विवरण के आउटपुट या descriptionWithLocale:(id)locale प्रिंट करेगा। तो वह क्या करता है? फिर, एप्पल के दस्तावेज़ से:

शब्दकोश में प्रत्येक कुंजी एक NSString वस्तु है, तो प्रविष्टियों कुंजी द्वारा आरोही क्रम में सूचीबद्ध हैं, अन्यथा जिस क्रम में प्रविष्टियों सूचीबद्ध हैं अनिर्धारित रहता है।

जब उपयोग करने के लिए में पाश, उर्फ ​​फास्ट गणन, वस्तुओं के आदेश अपरिभाषित है, इसलिए यही वजह है कि पाश के उत्पादन के क्रम में नहीं है। यदि आप किसी NSDictionary की सामग्री को क्रमशः प्रिंट करना चाहते हैं, तो आपको वर्णन विधि के व्यवहार का अनुकरण करना होगा।

this stackoverflow पद से:

NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(compare:)]; 
NSMutableArray *sortedValues = [NSMutableArray array]; 
for (NSString *key in sortedKeys) { 
    [sortedValues addObject: [dict objectForKey: key]]; 
} 

मुझे आशा है कि यह चीजों को साफ करता है।

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