Как сравнить элементы в массиве целых чисел? - PullRequest
0 голосов
/ 15 сентября 2011

Я хочу сравнить массив, содержащий значения int, с числом

пример [1,2,30,1,40,200,10,500] <500 означает, что массив содержит элементы меньше 500. </p>

Как мне сделать dis?

Заранее большое спасибо

Я сделал это, скажем, недействительный opernd:

if ([placeName count])
{
    for (int i =0; i < [placeName count]; i++) 
    {
        NSArray *sortedArray=[placeName sortedArrayUsingFunction:intSort context:NULL];
        self.placeName = [NSMutableArray arrayWithArray:sortedArray];

        NSMutableArray *tempArray = [sortedArray objectAtIndex:i];

        NSDecimalNumber *Distance = [tempArray objectForKey:@"distance"];

        NSMutableArray *intDistanse=[Distance intValue];
        DLog(@"Distance%d", intDistanse);

        NSMutableArray *intDistanse=[Distance intValue];
        DLog(@"Distance%d", intDistanse);

        for(int j = 0; j < [intDistanse count]; j++)
        {
             if ( intDistanse[j] < 500 ) //here its says error
             {

                DLog(@"success");

             }
        }
    }
}

Ответы [ 5 ]

3 голосов
/ 15 сентября 2011

Что за массив?NSArray или языковой массив?

Самым простым способом является цикл.Не зная типа массива, это псевдокод.

for(int i = 0; i < arrayCount; i++)
    if ( array[i] < 500 )
         .... got an element less than 500 ....

Код на самом деле не имеет смысла:

  • этот код должен генерировать тонну предупреждений компилятора;каждое предупреждение указывает на ошибку, которая должна быть исправлена.Также попробуйте «Построить и проанализировать».

  • вы сортируете массив каждый раз через цикл;трата ресурсов и не имеет смысла

  • все, что вводится как NSMutableArray *, не имеет смысла;у вас действительно есть массив массивов массивов?

  • ... вызов objectForKey: на любом объекте, кроме NSDictionary, не работает

  • intValue возвращает (int), а не NSMutableArray *

  • , если intDistance является (int), тогда оно должно быть просто (intDistance <500) </p>

В целом, я бы посоветовал вам вернуться назад и просмотреть Руководство по языку Objective-C и несколько рабочих примеров.

1 голос
/ 15 сентября 2011

Как правило, вы зацикливаетесь на каждом элементе в массиве, проверяя, является ли каждый элемент меньше 500.

Например:

int i;
for (i=0; i < THE_SIZE_OF_THE_ARRAY; ++i)
{
  if (array[i] < 500)
  {
    /* Do something */
  }
}
0 голосов
/ 16 сентября 2011

Нашел ли решение для этого типа литья:

NSMutableArray *tempArray = [sortedArray objectAtIndex:i];
        //DLog(@"sortedArray%@", sortedArray);8=
        NSNumber *DistanceNum = [tempArray objectForKey:@"distance"];
        NSLog(@"distance%@:::",DistanceNum);
        NSInteger intDistance = (int)[DistanceNum floatValue];

        if(intDistance<500)
        {
            NSLog(@"h:)");
            NSString *notifications =@"Yes";
            [[AppHelper mDataManager] setObject:notifications forKey:@"notifications"]; 

            NSLog(@"notifications:%@",notifications);
            RemindMeViewController *object = [[RemindMeViewController alloc] initWithNibName:@"RemindMeViewController" bundle:nil];
            //  RemindMeViewController *object=[[RemindMeViewController alloc]initWithNibName];

            NSLog(@"notifications set");
            [object scheduleNotification];
        }
0 голосов
/ 15 сентября 2011

Вы можете сделать это очень легко, просто внедрив наблюдателя для сравнения. Ниже приведен пример реализации пользовательского наблюдателя для сравнения

.
@implementation NSArray (KVO)

- (void)addObserver:(NSObject *)observer toObjectsAtIndexes:(NSIndexSet *)indexes forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context
{
    NSUInteger idx=[indexes firstIndex];
    while(idx!=NSNotFound)
    {
        [[self objectAtIndex:idx] addObserver:observer
                                   forKeyPath:keyPath
                                      options:options
                                      context:context];
        idx=[indexes indexGreaterThanIndex:idx];
    }
}

- (void)removeObserver:(NSObject *)observer fromObjectsAtIndexes:(NSIndexSet *)indexes forKeyPath:(NSString *)keyPath
{
    NSUInteger idx=[indexes firstIndex];
    while(idx!=NSNotFound)
    {
        [[self objectAtIndex:idx] removeObserver:observer
                                      forKeyPath:keyPath];
        idx=[indexes indexGreaterThanIndex:idx];
    }
}

-(void)addObserver:(id)observer forKeyPath:(NSString*)keyPath options:(NSKeyValueObservingOptions)options context:(void*)context;
{
    if([isa instanceMethodForSelector:_cmd]==[NSArray instanceMethodForSelector:_cmd])
        NSRaiseException(NSInvalidArgumentException,self,_cmd,@"not supported for key path %@ (observer was %@)", keyPath, observer);
    else
        [super addObserver:observer
                forKeyPath:keyPath
                   options:options
                   context:context];
}

-(void)removeObserver:(id)observer forKeyPath:(NSString*)keyPath;
{
    if([isa instanceMethodForSelector:_cmd]==[NSArray instanceMethodForSelector:_cmd])
        NSRaiseException(NSInvalidArgumentException,self,_cmd,@"not supported for key path %@ (observer was %@)", keyPath, observer);   
    else
        [super removeObserver:observer
                   forKeyPath:keyPath];
}
@end
0 голосов
/ 15 сентября 2011

Если вы хотите узнать, существует ли хотя бы один элемент, соответствующий вашему состоянию:

bool found = false;
for(int i = 0; i < sizeof(example)/sizeof(example[0]); ++i)
{
    if(example[i] < 500)
    {
        found = true;
        break;
    }
}

И если вы хотите проверить, соответствуют ли все элементы вашему состоянию:

bool found = true;
for(int i = 0; i < sizeof(example)/sizeof(example[0]); ++i)
{
    if(example[i] >= 500)
    {
        found = false;
        break;
    }
}
...