Получить следующий объект в списке после объекта с текущим идентификатором

1

Я знаю, что название запутывает, поэтому я попытаюсь изо всех сил объяснить здесь...

у меня есть

class T{
   int id;
   string value;
}


List<T> objs;

в моем коде, когда я извлекаю исходный список, я беру первый id с

int currentID = objs.FirstOrDefault().id;

теперь мне нужно захватить дальше. не зная текущей позиции, где я, как я могу захватить следующий элемент id...

 objs.select(x => x.id)
        .where(//you are the object that exists after the one with currentID);
  • 1
    Объект, который существует после первого, будет вторым ( objs[1] ), правильно? Или я упускаю некоторые детали? Вы хотите сказать, что хотите получить объект с первым идентификатором?
  • 0
    @DStanley идентификаторы могут быть случайными, и в любом порядке они внутренне отсортированы по другому свойству, тогда как случайные из них удаляются в зависимости от условий, оставляя мне список со списком идентификаторов (1,57,12,417,3)
Показать ещё 2 комментария
Теги:
linq
linq-to-objects

2 ответа

4
Лучший ответ

Если вы хотите получить следующий элемент после некоторого элемента, вы можете использовать SkipWhile() и Skip():

objs.SkipWhile(x => x.id == currentID).Skip(1).FirstOrDefault();
  • 0
    «x => x.id» не обязательно разрешается в логическое значение. Вы можете сыграть, но это может не дать ожидаемого результата.
0

Вы просто индексируете, поэтому используйте ElementAt:

int i = 0; //current position
int currentID = objs.ElementAt(i).id;
i++;

Выполните в цикле, чтобы получить следующий и т.д.

Если вы просто хотите итерации по всем элементам, просто используйте foreach:

foreach (T obj in objs)
{
   int currentID = obj.id;
}

Наконец, вы можете использовать GetEnumerator и использовать функцию MoveNext вместе с свойством Current. Это в основном использует foreach но контролирует итерацию самостоятельно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню