2011-03-13 4 views
1

私は配列の中に曜日を追加/削除しているので、曜日(つまり@"Fri, Mar 11, 2011", @"Wed, Mar 9, 2011", @"Tue, Mar 8, 2011", @"Mon, Mar 7, 2011")を保持していて、何らかの変数を作成したとしましょう。NSString *myDay = @"Thu, Mar 10, 2011";具体的には、配列の第1要素と第2要素の間にmyDay(すなわち@"Thu, Mar 10, 2011")が存在しない場合(または他の場合には)、配列内のこの要素(具体的には@"Fri, Mar 11, 2011"@"Wed, Mar 9, 2011"曜日がNSMutableArrayの2つの間にあるかどうかを判断しますか?

注:この配列には、特定の曜日(木曜日)の複数のエントリがありますが、それは別の週の一部に過ぎません。

答えて

1

私は右のあなたの質問を理解していれば、あなただけではない日は他の日の間にあるものの真の概念で、配列の内容を扱うために探しています。その場合、indexOfObject:への2つの呼び出しを使用して比較し、オブジェクトがそれらの間にあるかどうかを確認できます。例:この例では

- (BOOL)array:(NSArray *)arr hasObject:(id)obj between:(id)a and:(id)b { 
    NSUInteger startIdx = [arr indexOfObject:a]; 
    NSUInteger endIdx = [arr indexOfObject:b]; 
    NSUInteger targetIdx = [arr indexOfObject:obj]; 

    if(startIdx != NSNotFound && endIdx != NSNotFound && targetIdx != NSNotFound 
       && startIdx <= targetIdx && targetIdx <= endIdx) { 
     return YES; 
    } else { 
     return NO; 
    } 
} 

NSArray * days = [NSArray arrayWithObjects:@"Mon", @"Wed", @"Fri", @"Sat", nil]; 
[self array:days hasObject:@"Wed" between:@"Mon" and:@"Fri"]; // YES 
[self array:days hasObject:@"Wed" between:@"Wed" and:@"Wed"]; // YES 
[self array:days hasObject:@"Sat" between:@"Mon" and:@"Fri"]; // NO 
[self array:days hasObject:@"Thu" between:@"Mon" and:@"Fri"]; // NO 
[self array:days hasObject:@"Wed" between:@"Fri" and:@"Mon"]; // NO 

、我々は、オブジェクトが実際に(曜日)を表しているかについて気にしないので、木曜日は月曜日と金曜日の間であっても、方法はNOを返し木曜日は「doesnのため配列内に存在しません。

2番目の例の呼び出しも面白いケースです。比較するときに厳密な不等式を使用するようにメソッドを簡単に変更できるため、オブジェクトが他のオブジェクトの1つ(または両方)に一致する場合は2つのオブジェクト間にありません。

+0

物事は、このNSMutableArrayには木曜日のように複数のエントリがあることがあります。なぜなら、彼らはちょうど別の週の一部になるからです... – cgossain

+0

答えがどう変わるかわかりません - 私が提供した方法は配列内にすでに存在するオブジェクトなので、木曜日の数は重要ではありません。 – Tim

0

あなたが実際にやりたいことに応じて、これが100%コンパイルされているかどうかはわかりません。あなたは実際に何を見つけて戻ってほしいかに応じて以下を適応させることができます。また、あなたが保持したくないことを後にリリースすることを忘れないでください。

NSString *token = @"Wed"; 

NSMutableArray *before = [NSMutableArray init]; 
NSMutableArray *after = [NSMutableArray init]; 

bool beforeToken = true; 

for(id item in yourArray) { 
    if([token isEqualToString:item]) { 
     beforeToken = false; 
     continue; 
    } 

    if(beforeToken) 
     [before addObject:item]; 
    else 
     [after addObject:item]; 

} 
関連する問題