0

私の編集した質問:- 配列をコピーしました。しかし問題は、以下の行が [mainRestaurantArray removeObjectAtIndex:j]; を実行するときです。mainRestaurantArray のインデックスが減少します。これにより、適切なインデックス値を削除できなくなります

範囲外のインデックスのエラーを示しているため。arrayRestaurantList の合計インデックス -31 と mainRestaurantArray-25 の合計インデックス (重複値を削除した後) を取得します。

if([arrayRestaurantList count]==[mainRestaurantArray count]){
    BtnMore.hidden=YES;
    TablView.frame=CGRectMake(0,57, 320, 360);
    }   else{
    [mainRestaurantArray removeAllObjects];
    mainRestaurantArray=[[NSMutableArray arrayWithArray:arrayRestaurantList] retain];
    if ([arrayRestaurantList count]>10) {
        for (int i=0;i<[arrayRestaurantList count]-10;i++) {
            NSString *Old_data;
            Old_data=[[arrayRestaurantList objectAtIndex:i] objectForKey:@"Name"];
            NSLog(@"olddata==>%@",Old_data);
            for (int j=[arrayRestaurantList count]-10;j<[arrayRestaurantList count];j++) {              
                NSString *New_data;             
                New_data=[[arrayRestaurantList objectAtIndex:j] objectForKey:@"Name"];
                NSLog(@"olddata==>%@ newdata==>%@",Old_data,New_data);
                if ([New_data isEqualToString:Old_data]) {
                    //BtnMore.hidden=YES;                   
                    [mainRestaurantArray removeObjectAtIndex:j];

                }
            }
        }
    }
    }

Web サービスからの応答として送られてくるデータから埋められたNSMutableArray( ) があります。mainRestaurantArray

のデータはmainRestaurantArray次のようなものです:-

{
    Address = "Ellisbridge Opposite Parimal Garden Near Doctor House Ahmedabad Gujarat 380006 India (Collegian Restaurant)";
    Image = "";
    Latitude = "23.020119999999999";
    Longitude = "72.556343999999996";
    Name = "Collegian Restaurant";
    "Phone_Number" = "079 26401020";
    url = "";
}
{
    Address = "Ground Floor Aakash Ganga Ellisbridge B/H Gujrat College : Next To Art Palace Ellisbridge Ahmedabad Gujarat 380006 India (TC's Bread Shop)";
    Image = "";
    Latitude = "23.023137999999999";
    Longitude = "72.560096000000001";
    Name = "TC's Bread Shop";
    "Phone_Number" = "079 26568158";
    url = "";
}
{
    Address = "Center Point Panchwati Crossing C G Road Ahmedabad Gujarat 380009 India (Kings Food Factory)";
    Image = "";
    Latitude = "23.022670000000002";
    Longitude = "72.555651999999995";
    Name = "Kings Food Factory";
    "Phone_Number" = "079 4002 1122";
    url = "http://www.kingsfoodfactory.com";
}

つまり、辞書形式です。データが繰り返されることが時々起こります。だから私はそれを削除したいと思います。私は以下のようなコードを書いていました:

if ([mainRestaurantArray count]>10) {
        for (int i=0;i<[mainRestaurantArray count]-10;i++) {
            NSString *Old_data;
            Old_data=[[mainRestaurantArray objectAtIndex:i] objectForKey:@"Name"];
            NSLog(@"olddata==>%@",Old_data);
            for (int j=[mainRestaurantArray count]-10;j<[mainRestaurantArray count];j++) {              
                NSString *New_data;             
                New_data=[[mainRestaurantArray objectAtIndex:j] objectForKey:@"Name"];
                NSLog(@"olddata==>%@ newdata==>%@",Old_data,New_data);
                if ([New_data isEqualToString:Old_data]) {
                    BtnMore.hidden=YES;
                    TablView.frame=CGRectMake(0,57, 320, 360);
                    [mainRestaurantArray removeObjectAtIndex:j];

                }
            }
        }
    }

しかし、このコードの問題は、値を削除すると参照が失われることです。そのため、アプリケーションがクラッシュします。データを削除する方法を教えてください。

前もって感謝します...

4

3 に答える 3

5
 NSArray *cleanedArray = [[NSSet setWithArray:listItems] allObjects]; 

//listItems は NSMutableArray オブジェクトです。

于 2012-04-12T13:15:43.747 に答える
1

これにはこのメソッドを使用できます

+(NSMutableArray*)GetFilterData :(NSMutableArray*)array;
{
//Filter duplicate data
NSArray *copy = [array copy];
NSInteger index = [copy count] - 1;
for (id object in [copy reverseObjectEnumerator]) {
    if ([array indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) {
        [array removeObjectAtIndex:index];
    }
    index--;
}
[copy release];
NSLog(@"arr %@",[array description]);
return array;
}
于 2012-09-07T06:35:39.523 に答える
0

NSMutable 配列から重複値を削除するコードを次に示します。.それはあなたのために働くでしょう。myArray は、重複値を削除する可変配列です。

for(int j = 0; j < [myArray count]; j++){
    for( k = j+1;k < [myArray count];k++){
        NSString *str1 = [myArray objectAtIndex:j];
        NSString *str2 = [myArray objectAtIndex:k];
        if([str1 isEqualToString:str2])
            [myArray removeObjectAtIndex:k];
    }
}

配列を印刷すると、繰り返される値がないことがわかります

于 2012-05-15T09:08:54.763 に答える