2011-12-20 10 views
8

मैं एनएसएमयूटेबलएरे का उपयोग कर रहा हूं। मैं मूल्यों को तिथि से प्राप्त करना चाहता हूं जैसे हम SQL group by "log_date" में करते हैं।एनएसएमयूटेबलएरे में "मूल्यों से समूह" को कैसे कार्यान्वित करें?

logMuArray (
     { 
     "log_currenttime" = "4:30pm"; 
     "log_date" = "11.12.2011"; 
     "log_duration" = "1:30"; 
    }, 
     { 
     "log_currenttime" = "4:33pm"; 
     "log_date" = "11.12.2011"; 
     "log_duration" = "2:21"; 
    }, 
     { 
     "log_currenttime" = "4:40pm"; 
     "log_date" = "11.12.2011"; 
     "log_duration" = "5:30"; 
    }, 
     { 
     "log_currenttime" = "7:30pm"; 
     "log_date" = "12.12.2011"; 
     "log_duration" = "1:30"; 
    }, 
     { 
     "log_currenttime" = "7:33pm"; 
     "log_date" = "12.12.2011"; 
     "log_duration" = "2:21"; 
    }, 
     { 
     "log_currenttime" = "7:40pm"; 
     "log_date" = "12.12.2011"; 
     "log_duration" = "5:30"; 
    }, 
     { 
     "log_currenttime" = "07:16pm"; 
     "log_date" = "19.12.2011"; 
     "log_duration" = "0:07"; 
    }, 
     { 
     "log_currenttime" = "7:31pm"; 
     "log_date" = "19.12.2011"; 
     "log_duration" = "0:04"; 
    }, 
     { 
     "log_currenttime" = "7:33pm"; 
     "log_date" = "19.12.2011"; 
     "log_duration" = "0:03"; 
    }, 
     { 
     "log_currenttime" = "7:33pm"; 
     "log_date" = "19.12.2011"; 
     "log_duration" = "0:06"; 
    }, 
     { 
     "log_currenttime" = "7:35pm"; 
     "log_date" = "19.12.2011"; 
     "log_duration" = "0:05"; 
    } 
) 

** तो, मैं सिर्फ प्रदर्शन किया है ....

NSLog(@"logMuArray %@",[logMuArray valueForKey:@"log_date"]); 

लेकिन मैं केवल अद्वितीय दिनांकों को लाने के लिए चाहते हैं। ** मैं NSPredicate या परिवर्त्य सेट आदि के बारे में सोचा है .. ।

logMuArray (
    "11.12.2011", 
    "11.12.2011", 
    "11.12.2011", 
    "12.12.2011", 
    "12.12.2011", 
    "12.12.2011", 
    "19.12.2011", 
    "19.12.2011", 
    "19.12.2011", 
    "19.12.2011", 
    "19.12.2011" 
) 

अग्रिम धन्यवाद .....

संपादित करें:

मैं भी "@distinctUnionOfObjects"

के बारे में सुना है ......

+0

क्या यह संभव है विशिष्ट यही तर्क के साथ दो या अधिक कुंजियों के आधार पर वस्तुओं की पहचान के लिए? –

+0

आपका प्रश्न अच्छा है, बेहतर आपको एक प्रश्न पूछना चाहिए, क्योंकि कोड भी आवश्यक है, इसलिए कृपया अपने प्रश्न को ढेर ओवरफ्लो में पूछें। दूसरी तरफ मुझे इस पर ज्यादा विचार नहीं है, लेकिन मुझे इसे हल करने के लिए एक समय चाहिए। इसे हल करने का प्रयास करेंगे, लेकिन इसे हल करने के लिए एक कोड की आवश्यकता है। बेहतर है कि आप कोड के साथ स्टैक ओवरफ़्लो पर अपना प्रश्न पोस्ट करें। धन्यवाद –

+0

यह आपकी मदद कर सकता है [ऑब्जेक्ट्स को समूहबद्ध करके एनएसएआरआरई को पुनर्स्थापित करें w.r.t उस सरणी में प्रत्येक शब्दकोश में मिलान करने वाली कुंजियां] (http: // stackoverflow।कॉम/प्रश्न/15375528/पुनर्निर्माण-ए-एनएसएआरएआर-बाय-ग्रुपिंग-ऑब्जेक्ट्स-द-मिलान-आईडी-नंबर/38472661 # 38472661) – umakanta

उत्तर

14

शांति के जवाब पास है। आप कुंजी-मूल्य कोडिंग संग्रह ऑपरेटर @distinctUnionOfObjects का उपयोग करना चाहते हैं। जगह ऑपरेटर तुरंत, कुंजी है जो आप को प्रभावित करना चाहते हैं पूर्ववर्ती के रूप में अगर यह कुंजी पथ आप तक पहुँच रहे हैं का एक हिस्सा है:

[logMuArray valueForKeyPath:@"@distinctUnionOfObjects.log_date"] 

सूचना valueForKeyPath: का उपयोग करते हैं, नहीं valueForKey: पूर्व में एक विधि है कुंजी-मूल्य कोडिंग प्रोटोकॉल, और विशेषताओं की मनमानी गहराई तक पहुंचने की अनुमति देता है। मुख्य पथ एक NSString डॉट से अलग कुंजी से बना है। प्रत्येक कुंजी लुकअप का परिणाम अगली कुंजी (मूल रिसीवर से शुरू) तक पहुंचने के लिए उपयोग किया जाता है; डिफ़ॉल्ट रूप से, valueForKey: को प्रत्येक चरण में बस बुलाया जाता है।

+0

क्या मैं इसे एकाधिक कुंजी पथ जैसे [log_currenttime, log_date] के साथ उपयोग कर सकता हूं – wod

3

आप इस के लिए KVC उपयोग कर सकते हैं।

[logMuArray valueForKey:@"@distinctUnionOfArrays.log_date"] 

संपादित करें: संपादित करने से इस wrt जोश रिस्पांस

[logMuArray valueForKeyPath:@"@distinctUnionOfArrays.log_date"] 
+0

यह मुझे एक त्रुटि क्यों देता है ... सिग्नल निरस्त .. ??? कृपया उत्तर –

+0

[logMuArray valueForKeyPath: @ "@ individualUnionOfArrays.log_date"], valueForKeyPath – Raj

3

आप की तरह अद्वितीय मदों के लिए NSSet उपयोग करना चाहिए:

NSSet *filteredData = [NSSet setWithArray:[logMuArray valueForKey:@"log_date"]]; 
+0

के साथ valueForKey बदलें यह मेरे लिए अच्छा काम करता है ... parul go –

+0

धन्यवाद mogs :) लेकिन पहले जैश कैसवेल का उत्तर भी अच्छा और preferable है .. –

+0

आपका स्वागत है ... कोई फर्क नहीं पड़ता – Maulik

0

आप एक सेट

यहाँ शामिल कर सकते हैं कुछ उदाहरण है कोड

NSMutableArray * mArray = [NSMutableArray array]; 
NSDictionary *d1 = [NSDictionary dictionaryWithObjectsAndKeys:@"foo",@"bar",@"bar",@"oooo",nil]; 
NSDictionary *d2 = [NSDictionary dictionaryWithObjectsAndKeys:@"boo",@"bar",@"bar",@"oooo",nil]; 
NSDictionary *d3 = [NSDictionary dictionaryWithObjectsAndKeys:@"boo",@"bar",@"bar",@"oooo",nil]; 
[mArray addObject:d1]; 
[mArray addObject:d2]; 
[mArray addObject:d3]; 
NSLog(@"the array\n%@", mArray); 
NSLog(@"just bar %@", [mArray valueForKey:@"bar"]); 
//get unique values 
NSSet * set = [NSSet setWithArray:[mArray valueForKey:@"bar"]]; 
NSLog(@"unique just bar %@", [set allObjects]); 

और यहां उत्पादन

2011-12-20 01:50:59.034 TestEnvironment[32401:207] the array 
(
     { 
     bar = foo; 
     oooo = bar; 
    }, 
     { 
     bar = boo; 
     oooo = bar; 
    }, 
     { 
     bar = boo; 
     oooo = bar; 
    } 
) 
2011-12-20 01:50:59.036 TestEnvironment[32401:207] just bar (
    foo, 
    boo, 
    boo 
) 
2011-12-20 01:50:59.038 TestEnvironment[32401:207] unique just bar (
    foo, 
    boo 
) 
1

इस तर्क कोशिश आपकी मदद कर सकते

-(NSMutableArray *) makeUnique :(NSMutableArray *) array {  
    int i; 
    int count = [array count]; 
    for (i =0; i< count ; i++) { 
     NSRange range = NSMakeRange (i+1, count); 
     [array removeObject:[array objectAtIndex:i] inRange:range]; 
    } 
    return array; 
} 
संबंधित मुद्दे