2014-01-29 2 views
-4

Я свежее iOS. В моем приложении у меня есть 3 изменяемые массивы с объектами какКак подсчитать изменяемые объекты массива в iphone?

NSMutableArray *MuteItem = [NSMutableArray alloc]initWithObjects:@"a", @"b", @"b", @"c", @"c", @"c", nil]]; 
NSMutableArray *MuteQuantity = [NSMutableArray alloc]initWithObjects:@"1", @"1", @"1", @"1", @"1", @"1", nil]]; 
NSMutableArray *MutePrice = [NSMutableArray alloc]initWithObjects:@"4", @"3", @"3", @"6", @"6", @"6", nil]]; 

Теперь мне нужно напечатать, что 3 изменяемые массивы значений с подсчета количества одного и того же элемента и рассчитать цену также как объекты

MuteItem = { a, b, c } 
MuteQuantity = { 1, 2, 3 }  // counting of same item's quantity like {1, 1+1, 1+1+1} 
MutePrice = { 4, 6, 18 }  // here addition of same item's prices like {4, 3+3, 6+6+6} 

Так никто , не могли бы вы помочь мне в этой проблеме. Заранее спасибо.

+0

просто используйте [array_Name count], чтобы получить объект obeject в массиве –

+0

и что вы второй квест, неясно, хотите ли вы вычислить тотальную цену в mutPrice или что? –

+0

@kamaleshkumaryadav: во втором вопросе, в MuteItem, уменьшается дублируемая 'c' от 3 до 1 и дублируется 'b' от 2 до 1. В MuteQuantity добавьте количество дублированных элементов, как у нас есть два элемента 'b', поэтому 1+ 1 количество равно 2 и три элемента «c», поэтому 1 + 1 + 1 количество равно 3. В то же время цены также в MutePrice одинаковы, как у нас есть два элемента «b», поэтому цена равна 3 + 3 = 6 и item 'c' цена 6 + 6 + 6 = 18. Я думаю, что сейчас понимаю проблему. – Ramesh

ответ

1

Этот код будет выполнять точно так, как вы просили, и даже обрабатывать любые ключи в MuteItem и будет генерировать три новых массива с совокупной информацией из каждого из трех исходных массивов.

NSMutableArray* muteItem = [[NSMutableArray alloc] initWithObjects: @"a", @"b", @"b", @"c", @"c", @"c", nil]; 
NSMutableArray* muteQuantity = [[NSMutableArray alloc] initWithObjects: @"1", @"1", @"1", @"1", @"1", @"1", nil]; 
NSMutableArray* mutePrice = [[NSMutableArray alloc] initWithObjects: @"4", @"3", @"3", @"6", @"6", @"6", nil]; 

NSMutableArray* setItem = [NSMutableArray array]; 
NSMutableArray* setQuantity = [NSMutableArray array]; 
NSMutableArray* setPrice = [NSMutableArray array]; 

NSSet* itemSet = [NSSet setWithArray: muteItem]; 
for (NSString* key in itemSet) { 
    NSIndexSet* indices = [muteItem indexesOfObjectsPassingTest: ^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
     return [obj isEqualToString: key]; 
    }]; 

    __block NSInteger totalQuantity = 0; 
    __block NSInteger totalPrice = 0; 
    [indices enumerateIndexesUsingBlock: ^void(NSUInteger idx, BOOL *stop) { 
     totalQuantity += [[muteQuantity objectAtIndex: idx] integerValue]; 
     totalPrice += [[mutePrice objectAtIndex: idx] integerValue]; 
    }]; 

    [setItem addObject: key]; 
    [setQuantity addObject: [NSNumber numberWithInteger: totalQuantity]]; 
    [setPrice addObject: [NSNumber numberWithInteger: totalPrice]]; 
} 

ПРИМЕЧАНИЕ. Этот код предполагает, что вы используете ARC. Кроме того, в вашем исходном коде вы забыли nil завершить свои конструкторы массивов.

EDIT: Я заметил, что ваши цены целые, вы можете изменить их на плавающие, если ваша валюта использует десятичные дроби. Для этого потребуется изменить определение totalPrice на float, и вы хотели бы изменить конец линии totalPrice += от integerValue до floatValue.

EDIT2: Переименованы все переменные, начинающиеся с заглавной буквы, поскольку это нарушает стандартное соглашение об именах. Только имена классов должны начинаться с прописной буквы, переменные всегда должны начинаться с нижнего регистра или переменные типа _. :)

+0

: Отлично, он работает. Спасибо, большое спасибо. – Ramesh

+0

Рад помочь!:) –

+0

Вы должны принять ответы, которые решают ваши вопросы, кстати! ;) –

Смежные вопросы