0

私はPersonオブジェクトを持っています。この人物オブジェクトには次の属性があります。

Name
StartDate
EndDate

Personこのオブジェクトを配列に保存しています。この配列には 100 を超える人物オブジェクトが含まれる場合があります。上記の属性はすべて文字列です。

以下は、その配列内の人物オブジェクトの例です。

John, Tue Feb 22, Thr Mar 30
Jack, Wed Mar 09, Fri Apr 21
Jack, Thu Mar 19, Fri Dec 20
Jack, Tue Jan 08, Fri Apr 26 etc..

たとえば、日付を指定する必要があり、それが人物オブジェクトWed 29 Marの範囲内にあるかどうかを確認する必要があります。シナリオの疑似コードがあります。StartDateEndDate

StartDateと照合する日付EndDateも文字列です。

擬似コード:

if Startdate >= providedDate && EndDate <= providedDate {

// Add to an Array


else 

//Do not add to an array 

、およびはすべて文字列StartDataであるため、提供された日付よりも大きいか小さいかを確認するにはどうすればよいですか?EndDateProvidedDate

注:使用しないアプローチが必要ですNSPredicate

4

2 に答える 2

1

値を比較するには、比較可能な値が必要です。NSDate オブジェクトを使用したり、日付をソート可能な文字/数値形式 (20120425 など) にキャストしたり、独自のcompare:options:メソッドを実装するカスタム オブジェクトを使用したりできます。

または、別のcompareString:string1 toString:string2メソッドを作成して、文字列をそのまま使用することもできます。

自分がやりたいことを決めるだけです。

于 2012-04-26T03:57:14.463 に答える
1

ここで何をテストされていますか?日付を文字列として保存するのは奇妙です。指定された日付と比較するために、文字列の日付を解析するつもりですか? もしそうなら、私はあらゆる種類のデートクラスから離れます.

もしそうなら、私はそれを 3 つの文字列 (曜日、月、日) に分割します。曜日は気にしません。

あなたは年を持っていないので、それについての論理を行うことはできません... 私はそれがすべて同じ年にあると仮定しています. (「この日がこの曜日にあったのは、最近のどの年か」という計算のようなおかしなことをすることもできますが、さあ...)

各月を整数に関連付けます。たとえば、ハッシュ マップを使用するとします。Months.put('January',1) などのように

各日付から数値を取得します。文字列から整数に変換するだけです。

次に、何かが日付の前後にあるかどうかのロジックは次のとおりです (-1 の場合は myMonth が前、0 は同じ、1 は myMonth が後です)

if (Months.get(myMonth) < Months.get(providedMonth)) return -1
else if (Months.get(myMonth) > Months.get(providedMonth)) return 1
else
  if (myDate < providedDate) return -1;
  else if (myDate > providedDate) return 1;
  else return 0;
于 2012-04-26T01:51:07.810 に答える