WebHU - Programozási kérdések és válaszok

Hogyan lehet megtalálni a hiányzó napokat egy sor NSD-fájlból?

Rendezett NSDates NSMutableArray-m van. Olyan metódust keresek, amely visszaadja az eredeti tömbből hiányzó összes napot (NSDate formában) a tömb legkorábbi dátuma és a most között. Az egyenlőség ellenőrzésekor csak az NSDate év, hónap és napi része érdekel. Például:

NSMutableArray *missingDates;
for (NSDate *date in allDatesBetweenOldestDateAndNow){
    if (date isNotIn: myDates)
        [missingDates addObject:date];
return missingDates;

Bármilyen segítséget nagyra értékelnénk. Kösz!


  • Ne feledje, hogy ha ez egy rendezett tömb, akkor csak azt kell meghatároznia, hogy a tömb két szomszédos dátuma szomszédos nap-e vagy sem. 11.01.2013

Válaszok:


1

Javaslom a NSDateComponents használatát, és az Apple-nek van egy útmutató a használatukhoz.

Ez az Apple útmutató elmagyarázza, hogyan kell elvégezni a számításokat dátum NSDateComponents az Önéhez hasonló feladatok végrehajtásához.

10.01.2013
  • Csak hogy még egy kicsit hozzátegyük, az NSDate egyedülálló pillanat és idő. Az év hónapja és napja teljes mértékben a területi beállítástól függ, ezért az NSDateComponents használatával kell elvégeznie, amit szeretne. 10.01.2013
  • @HotLicks – Rossz eszköz a munkához. Az NSDateFormatter célja a dátum karakterlánc-ábrázolása, nem pedig a dátumszámítások elvégzésére. Igen, működni is lehet, de bajt kérsz az éles tokkal stb. 11.01.2013
  • @HotLicks - Ha ismerték volna, elmondanám :) Ettől függetlenül miért használnád inkább a dátumformázót az NSDateComponents helyett? 11.01.2013
  • Legutóbbi NSDateFormatter használatakor a teljesítmény jelentősen gyengébb volt, mint a NSDateComponents. Mivel a kérdés a dátumok listájának áthaladására vonatkozott, és a lista potenciálisan nagy lehet, arra az opcióra válaszoltam, amely szerintem a legjobb teljesítményt nyújtja, nem pedig a legkevésbé kódot. Bár a teljesítmény azóta javulhatott, iOS 5.0 használatakor találkoztam ezzel 11.01.2013
  • @DBD - Ha minden iterációhoz hozna létre egy új formázót, akkor ezt hinném. 11.01.2013

  • 2

    Előfordulhat, hogy a NSDate alosztályba kell sorolnia, és hozzá kell adnia egy olyan módszert, amely összehasonlítja a dátumokat az idő figyelembevétele nélkül:

    - (BOOL) isEqual:(id)object
    {
        NSDateComponents* c1= [[NSCalendar currentCalendar]  components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate: self ];
        NSDateComponents* c2= [[NSCalendar currentCalendar]  components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate: object ];
        return [c1 isEqual: c2];
    }
    

    A többi természetes: ezzel a módszerrel megnézheti, hogy van-e dátuma a tömbnek.

    10.01.2013
  • Ez nem árulja el, ha egy nap eltávolodnak egymástól. 11.01.2013
  • Ez az if (date isNotIn: myDates) részre vonatkozott: ha egyéni NSDate objektumok tömbje isEqual: felülbírálva van, akkor a includeObject: segítségével megtudhatja, hogy egy objektum benne van-e a tömbben vagy sem. 11.01.2013
  • Szóval hogyan lehet megállapítani, hogy mely dátumok hiányoznak? 11.01.2013
  • Az algoritmus azonban a következő: hozzon létre egy dátumtömböt a két dátum között, és töröljön ki minden dátumot, amely a dátumtömbjében szerepel. Igazad van, ha úgy gondolja, hogy nem hatékony, akkor jobban fogja csinálni. +1. 11.01.2013

  • 3

    Nincs összeállítva – valószínűleg vannak tuposok.

    NSDateFormatter* dayFmt = [[NSDateFormatter alloc] init];
    [dayFmt setTimeZone:<whatever time zone you want>];
    [dayFmt setDateFormat:@"g"];
    NSInteger lastDay = [[dayFmt stringFromDate:startDate] integerValue];
    // Note:  We assume that myDates is sorted, as stated.
    for (NSDate* myDate in myDates) {
        NSInteger myDay = [[dayFmt stringFromDate:myDate] integerValue];
        while (myDay > lastDay+1) {
            lastDay++;
            NSDate* newDate = [dayFmt dateFromString:[NSString stringWithFormat:@"%d", lastDay]];
            [missingDates addObject:newDate];
        }
    }
    

    (Meghagyom a felhasználónak, hogy kitalálja, hogyan töltse ki a hiányzó dátumokat az utolsó tömbbejegyzés és valamilyen tetszőleges befejezési dátum között.)

    (Azt is meg kell jegyezni, hogy a kód azt feltételezi, hogy nincsenek ismétlődő dátumok a tömbben. Könnyen kezelhető, de egy másik feladat a felhasználó számára.)

    10.01.2013
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..