0

次のようなデータの辞書があります。

{
    asr = "4:23 pm";
    dhuhr = "12:02 pm";
    fajr = "1:17 am";
    isha = "10:47 pm";
    maghrib = "8:23 pm";
    shurooq = "3:41 am";
}

私の目標は、次に来る時間を決定することです。私の計画は、次のコードを使用してこれらを実際の NSDates に変換することです。

//create an NSDate with todays date and the right prayer time
NSString *prayerDateString = [curDate stringByAppendingString: @" "];
prayerDateString = [prayerDateString stringByAppendingString: time];
NSLog(@"prayer date string: %@", prayerDateString);

//convert string back to date
NSDate *prayerDateAndTime = [dateAndTimeFormatter dateFromString:prayerDateString];

[dictionaryOfDatesAsDates addObject:prayerDateAndTime];

これはうまくいくと思いますが、辞書の形式を正しく保持しているかどうかはわかりません。次に、[currentDate timeIntervalSinceNow]それぞれをチェックするために使用し、最小の正の時間間隔が次回になると想定し、名前を取得しasrます。

これから最小値を取得するために、反復を実行して時間間隔の値を時間の名前とともにどこかに保存する方法がわかりませんか?

これを達成するにはどうすればよいですか?

4

2 に答える 2

2

したがって、日付を取得して配列に追加しました。

NSArray *prayerDateAndTimes = ...

昨日に引き続き、

日付のリストを取得し、NSPredicate を使用してそのリストを日付 >= [NSDate date] にフィルターし、昇順で並べ替えます。次に、フィルター処理され、並べ替えられた配列の最初の項目が次の日付になります。

まず、すでに過ぎた日付を除外します。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF >= %@", [NSDate date]];

NSArray *validPrayerDateAndTimes = [prayerDateAndTimes filteredArrayUsingPredicate:predicate];

これで、今日さらに日付があるかどうかがわかります。

if (validPrayerDateAndTimes.count > 0) {
    // yay, sort to find the next one
    validPrayerDateAndTimes = [validPrayerDateAndTimes sortedArrayUsingSelector:@selector(compare:)];

    NSLog(@"next date: %@", [validPrayerDateAndTimes objectAtIndex:0]);
} else {
    NSLog(@":-(");
}
于 2013-07-06T14:31:20.827 に答える