2012-04-23 12 views
5

मैं SQLite पर काम कर रहा हूँ और मैं एक प्रश्न जो मुझे दो सरणियों रिटर्न लिखा है ItemsArray और CustomersIDArray के रूप में:Arrays में डुप्लिकेट मान कैसे खोजें?

ItemsArray 
Element at Index 0 = Off White, 
Element at Index 1 = Fan, 
Element at Index 2 = Off White, 
Element at Index 3 = Delux, 
Element at Index 4 = Fan 

CustomerIDArray 
Element at Index 0 = 1, 
Element at Index 1 = 2, 
Element at Index 2 = 2, 
Element at Index 3 = 3, 
Element at Index 4 = 4 

मुझे लगता है कि बंद व्हाइट = 2 (गिनती), फैन = 2 (गिनती) और की तरह परिणाम चाहते हैं डेलक्स = 1; और परिणामी सरणी,

Result Array 
Element at Index 0 = Off White, 
Element at Index 1 = Fan, 
Element at Index 2 = Delux 

असल में मैं पहली बार सरणी में पुनरावृत्ति की गिनती चाहते हैं, लेकिन मूल्य CustomerArray के लिए एक ही नहीं करना चाहिए। कृपया तर्क या कोड के माध्यम से मेरी मदद करें।

+0

इस प्रश्न पर दिए गए समाधान का प्रयास करें: (http://stackoverflow.com/questions/6841072/how-to-count-duplicates-values-in-nsarray) – iNoob

+0

@INoob प्रिय मुझे नहीं पता कि एनएससीएन्टेडसेट का उपयोग कैसे करें .. क्या आप मुझे बता सकते हैं ? –

+0

यहां जवाब का प्रयास करें: http://stackoverflow.com/a/7606138/876283 – iNoob

उत्तर

3
-(NSMutableArray *)getCountAndRemoveMultiples:(NSMutableArray *)array{ 

    NSMutableArray *newArray = [[NSMutableArray alloc]initWithArray:(NSArray *)array]; 
    NSMutableArray *countArray = [NSMutableArray new]; 
    int countInt = 1; 
    for (int i = 0; i < newArray.count; ++i) { 
     NSString *string = [newArray objectAtIndex:i]; 
     for (int j = i+1; j < newArray.count; ++j) { 
      if ([string isEqualToString:[newArray objectAtIndex:j]]) { 
       [newArray removeObjectAtIndex:j]; 
       countInt++; 
      } 
     } 
     [countArray addObject:[NSNumber numberWithInt:countInt]]; 
     countInt = 1; 
    } 
    NSMutableArray *finalArray = [[NSMutableArray alloc] initWithObjects:newArray, countArray, nil]; 
    NSLog(@"%@", finalArray); 
    return finalArray; 

} 
- (IBAction)getArrayInfo:(id)sender { 
    NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:@"Off White", @"Fan", @"Off White", @"Deluxe", @"Fan", nil]; 
    NSMutableArray *godArray = [self getCountAndRemoveMultiples:myArray]; 
    NSLog(@"Array from this end = %@", godArray); 
} 

मैं बस इसे बाहर का परीक्षण करने के -getArrayInfo की स्थापना की। ठीक काम करता है। जैसा कि आप देख सकते हैं, जिस सरणी को आप प्रदर्शित करना चाहते हैं वह सूचकांक: 0 पर होगा, और सूचकांक पर countArray: 1।

+0

में कितनी बार आता है यह वास्तव में अच्छा काम है, मैं अपने अनुसार कुछ बदलाव करता हूं ... अंगूठे ऊपर :) –

+0

मुझे एक और समस्या है जिससे आप मेरी मदद कर सकते हैं? –

+0

ज़रूर - एक प्रश्न पोस्ट करें, और यहां एक टिप्पणी के रूप में इसे एक लिंक छोड़ दें। – AMayes

0

इस प्रयास करें:

NSArray *copy = [ItemsArray copy]; 

NSInteger index = [copy count] - 1; 

for (id object in [copy reverseObjectEnumerator]) { 

    if ([ItemsArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) { 
     [ItemsArray removeObjectAtIndex:index]; 
    } 
    index--; 
} 
+0

मैं एनएसएमयूटेबलएरे का उपयोग कर रहा हूं, यह इसके लिए भी काम करेगा? –

+0

ऊपर पोस्ट किए गए कोड में छोटे बदलाव के साथ प्रयास करने के बारे में कैसे ... – chewy

+0

मैं इसे और उसके लिए इसके कार्यों को बदलता हूं। इसके अपडेट आइटम ऐरे। लेकिन मुझे दोहराने वाले आइटमों की गणना भी चाहिए। –

1

उपयोग NSCountedSet तरह

नीचे
NSMutableArray *ary_res = [[NSMutableArray alloc] init]; 
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"11",@"13",@"34",@"9",@"13",@"34",@"9",@"2",nil]; 
    NSCountedSet *set = [[NSCountedSet alloc] initWithArray:array]; 
    for(id name in set) 
    { 
     if([set countForObject:name]==2) 
      [ary_res addObject:name]; 
    } 
    // 
    NSLog(@"%@",ary_res); 
+0

मुझे दो दिनों में ऐरे में परिणाम की आवश्यकता है, तो दो बार फिर से उस आइटम को दोबारा सहेजें यदि तीन बचाएं 3 यदि एक तो 1। –

+0

@AmirIphone का अर्थ है कि यदि आप एक बार चाहते हैं तो आप "ऑफ व्हाइट" 3 बार भी चाहते हैं ... – Narayana

+0

हाँ ... bu टी यह भी जानना चाहता है कि ऐरे –

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