2017-12-06 5 views
-1

発現はXXXXXX.DATETIME 配列は発現が日付を含むチェック、ループ上{DATE、DATETIME}containsString:問題

が含ま含ま。 どちらも真です。しかし、私はDATEだけが通過しなければならないことを望む。

NSArray *array = [[NSArray alloc] initWithObjects: @"DATE", @"DATETIME", nil]]; 

for (int i=0; i<[array count]; i++) { 
    NSString *formatType = [array objectAtIndex:i]; 
    if ([expression containsString:formatType]){ 
     NSLog(@"%@", expression); 
    } 
} 

containsString以外のオプションはありますか?

+2

isEqualToString: '? – vadian

答えて

0

私はあなたが求めている正確にわからないんだけど、これは私の推測です:

  1. あなたは他人のプレフィックス(例えばあるそのうちのいくつかの単語の数を含むコレクション(array)を持っているDATE接頭辞はDATETIMEです)。これは動的配列です。つまり、単語がどのようなものになるかを事前に知ることはできません。そうでなければ、コンパイル時にトリミングします。
  2. あなたのコレクションに1つまたは複数の単語が含まれている可能性がある文字列(expression)があります。
  3. あなたの文字列にその単語が1回以上含まれている場合は、NSLogで表されるあなたの例ではで何かをしたい場合あなたのコレクションには単語の接頭辞である別の単語も含まれていない限り、あなたの文字列も短い単語が含まれている意味し、その場合には、あなたのみ短い単語の一致を報告したいです。

あなたの質問のこの読みが正しい場合、あなたのコレクションを前処理して他のものの拡張子である単語を含まないようにすることは、これに取り組む一つの方法です。擬似コードでは、これは次のようになります。

array = original collection, say "ERA", "DATETIME", "DATE" 
sortedArray = lexicographic sort of array, e.g. see NSArray's sortedArrayUsingComparator: 
    our sample would produce "DATE", "DATETIME", "ERA" 

lastWord = first word of sortedArray 
trimmedArray = new mutable array containing just lastWord 

for each nextWord in sortedArray 
    if NOT lastWord is prefix of nextWord (see NSString's hasPrefix:) 
     add nextWord to trimmedArray 
     lastWord = nextWord 
    end if 
end for 

私たちのサンプルと上記の最終結果は@[ "DATE", "ERA" ]だろう。この結果をarrayではなく元のコードで使用してください。

HTH