0
votes

Comment valider la date Démarrer et terminer le chevauchement d'une liste d'éléments

ce que j'ai

​​une liste d'objets avec ID code>, dentesteart code> et datefin) code>. p> xxx

Ce que j'ai besoin de faire h1>

Je dois valider si aucune des dates se chevauche. Je ne sais pas si chevauchement code> passe la bonne signification ici, voici quelques exemples: p>

entrée non valide forte> P>

myList.Any(
    x => x.Id == item.Id 
        &&
    (
        (
            item.DateStart <= x.DateStart 
                && 
            item.DateFinish > x.DateStart 
                && 
            item.DateFinish <= x.DateFinish
        ) 
            ||
        (
            item.DateStart >= x.DateStart 
                && 
            item.DateStart < x.DateFinish 
                && 
            item.DateFinish > x.DateFinish
        ) 
            ||
        (
            item.DateStart <= x.DateStart 
                && 
            item.DateFinish >= x.DateFinish
        )
    ) 
)


0 commentaires

3 Réponses :


0
votes

une version rapide et sale. Pas très performant que sur de grands ensembles. Mais peut être amélioré sur.

https://dotnetfiddle.net/widget/pen2lm xxx


0 commentaires

0
votes

J'ai essayé de refléter vos cas, mais je suggérerais d'écrire des tests d'unités pour tester pleinement tous vos scénarios. xxx pré>

puis a, au moins un extrait de code de lecture légèrement plus facile à lire / écrémé qui semble fonctionner parfaitement: p>

bars.Where(outer => ((outer.Start <= w.Start && outer.End >= w.Start)


0 commentaires

0
votes

J'utiliserais le code suivant:

static bool IsOverlapping(IEnumerable<Range> list)
{
    Range previousRange = null;
    foreach (var currentRange in list.OrderBy(x => x.DateStart).ThenBy(x => x.DateFinish))
    {
        if (currentRange.DateStart > currentRange.DateFinish)
            return true;

        if (previousRange?.DateFinish > currentRange.DateStart)
            return true;

        previousRange = currentRange;
    }

    return false;
}


0 commentaires