Что было бы хорошим подходом/алгоритмом, позволяющим мне перебирать динамически меняющийся список.Loop over динамически меняющийся список
- Этот список может содержать дубликаты
- нужно только следующий элемент после текущего элемента. то есть если я в настоящее время на
a[n]
в следующей итерации, я хочуa[n]
независимо
В настоящее время я пытался делать это (псевдо-код), который является довольно тривиальной
Однако, это не работает с дубликатами
List<String> list = new List<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
int currentItem = "a";
function nextItem(){
int index = findIndex(currentItem);
currentItem = list[index+1];
return currentItem;
}
print(nextItem()) #b
print(nextItem()) #c
list.addAt(3, "z") #add z at the 3rd index
print(nextItem()) #z
print(nextItem()) #d
print(nextItem()) #e
Я думаю об использовании связанного списка для этой проблемы. Вы порекомендовали бы другое решение или связанный список единственный способ?
Редактировать: Динамически меняя, я имею в виду, что содержимое списка whoes может быть изменено в середине цикла «i», следующего за вызовом nextItem(). Предположим только один поток.
Не должна ли последняя строка возвращать c, а не d? Кроме того, я не понимаю, как в первом вызове 'nextItem()', 'list [6]' (поскольку currentItem = 5) выдавал бы ошибку, не так ли, потому что ее не существует? Если вы не хотите вернуться к первому элементу, когда он достигнет конца списка. – Ash
@Ashwin_Nair да ваше право. Я только что исправил свою ошибку. Сначала у меня был список, заполненный номером, а затем сменил его на буквы, так как я чувствовал, что это сбивает с толку. Также currentItem является элементом в списке, а не индексом – Krimson
Если бы я был вами, я бы изменил мой currentItem на использование индекса ... таким образом вам не нужно беспокоиться о дубликатах. Я добавлю реализацию C# в качестве ответа. – Ash