Ostatnia ciągła wartość liczbowa w liście int-ów

0

Dzień dobry
Pytanie nowicjusza
mam listę int-ów np.:

List<int> myValues = new List<int> { 1, 2, 3, 4, 5, 7, 8 };

i potrzebuję do zmiennej np. "int nr" przypisać ostatnią wartość która jest ciągła w tej liście czyli wartość 5 (ponieważ nie ma 6 więc 5 jest ostatnią ciągłą liczbą) - mógłby mi ktoś podpowiedzieć jak to zrobić, będę bardzo wdzięczny?

1

@0orc: sprawdź czy różnica między aktualnie sprawdzaną liczbą a kolejną jest równa 1

2
  1. najpierw posortowałbym listę rosnąco
  2. a nastepnie w petli for sprawdzalbym czy biezacy element jest mniejszy o 1 od kolejnego
    • haczykiem bedzie to aby zabezpieczys sie przed pobraniem elementu z pozycji wiekszej niz rozmiar listy
0

Listę już posortowałem rosnąco w LINQ poprzez orderby ascending

z tego co widzę to chyba taka pętle for działa mi prawdiłowo ??

for (int i = 1; i < myValues.Count; i++)
{
if (myValues[i] - myValues[i - 1] > 1)
{
nr = myValues[i -1];
}
}

1

nie działa Ci jezeli miałbys pierwszy element w liscie pasujacy do reguly, tzn:

List<int> myValues = new List<int> { 1, 3, 4, 5, 7, 8 };

tu nadal bedzie Ci zwracalo 5 ;) - to jest wlasnie ten haczyk ;) nie wyjsc poza rozmiar i zadbac o sprawdzenie od pierwszego elementu

i zeby miesc juz wszystko kompeksowo, musisz wiedziec co zwracac dla takiego przypadku:

List<int> myValues = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
1

@Varran: faktycznie dla podanego przykładu nie działa, podejście drugie teraz powinno być dobrze ?

for (int i = 0; i < myValues.Count - 1; i++)
{
    if (myValues[i + 1] - myValues[i] == 1)
    {
        nr = myValues[i+1];
    }
    else
    {
        nr = myValues[i];
        break;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1