2010-11-26 3 views
2

私はデータベースから特定の値を取得しているので、その特定の値が存在しないキーは、配列のnull値をフェッチしています。nsarrayからヌル値を削除する方法は?

今、私の質問は、配列からnull値を取り除く方法です。 nsstringにnsarray値をフェッチしようとしましたが、別の配列にフェッチしようとしましたが、配列全体をフェッチしていませんでしたが、最後のインデックス値を取ります。

私を助けてください。ありがとうございました。

私はさらに、参照用のコードを付加しています:

NSString *url = [NSString stringWithFormat:@"webservice from where i m fetching data"]; 
NSLog(url); 
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; 
    [request setHTTPMethod: @"POST"]; 

NSData *returnData = [ NSURLConnection sendSynchronousRequest:request returningResponse: nil error: nil ]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding]; 
dataArray=[[returnString JSONValue] retain]; 
[self setAlldetails:dataArray];  

nsarray *InteName = [alldetails valueForKey:@"IntelligenceName"]; 

だから、配列は次のように配列InteNameの値をフェッチ:

(
    "00:00:00", 
    "00:00:00", 
    "17:15:00", 
    "17:15:00", 
    "17:15:00", 
    "17:15:00", 
    "00:00:00", 
    "00:00:00", 
    "17:15:00", 
    "17:15:00", 
    "17:15:00", 
    "17:15:00", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>", 
    "<null>" 
) 

ので、今、私はnull値ののoccuranceを削除したいです。

任意の推測??

+1

あなたのコードで間違いを追跡するためのコードをいくつか挙げてください。 – Ishu

+0

filteredArrayUsingPredicate :.以下のソリューションよりも少ないコード。 –

+0

また、O(n)よりもランタイムが優れていれば、私は驚くことはありません。 –

答えて

6

は、ソリューションの中を手に入れましたやっているT & E:

NSMutableArray *array = [[NSMutableArray alloc]init]; 
array = [InteName retain]; 
NSLog(@"Array : : %@",array); 

NSMutableArray *array1 = [[NSMutableArray alloc]init]; 

NSString *str; 
for(int i=0;i<[array count];i++) 
{ 
    str = [array objectAtIndex:i]; 
    if(str !=[NSNull null]) 
    { 
     [array1 addObject:str]; 
     //[array removeObjectAtIndex:i]; 
    } 
} 
+3

1つの提案:if(![str isKindOfClass:[NSNull class]])ではな​​く、(str!= [NSNull null])。後者は警告を出します。 – mpemburn

+0

@mpemburn IDチェックで十分であり、はるかに高速です。 2人のうちのどちらかを「id」にキャストして、警告が消えるはずです。 –

1

ない私が正しくあなたの質問を読んで、しかし、あなたは、アレイ内のNULLエントリを取り除きたいと仮定して、実際に@"<null>"文字列であることをしていた場合に確認してください:

NSMutableArray *array = ...; 
for (id nullObject in array) 
{ 
    if ([nullObject isKindOfClass:[NSString class] && [nullObject isEqualToString:@"<null>"] 
    { 
     [array removeObjectAtIndex:i]; 
    } 
} 
+0

配列の反復処理中に配列を変更すると、これがスローされます。 – zoul

+0

このコードは、上記のエラーメッセージと同じ例外をスローしています。ヌルはnull値と比較されます。 – Sarah

0
NSMutableArray *nulls = [NSMutableArray array]; 
for (id candidate in dataArray) 
    if (candidate == [NSNull null]) 
     [nulls addObject:candidate]; 
[dataArray removeObjectsInArray:nulls]; // assuming dataArray is mutable 
+0

ちょっとZoul、助けてくれてありがとう。私はあなたのコードを試しましたが、次のように終了します: - [NSNull isEqualToString:]:インスタンスに送信された認識できないセレクタ0x264ad68 2010-11-26 15:05:50.104 [4275:207] ***キャッチされない例外'NSInvalidArgumentException'、理由: ' - [NSNull isEqualToString:]:インスタンスに送信された認識できないセレクタ0x264ad68' ..... 'NSException'のインスタンスをスローした後に終了します。 プログラム受信信号: "SIGABRT"。これは、nullとnullを比較するためです。 – Sarah

+0

編集したバージョンをお試しください。 – zoul