我有一个列表,需要使用两种方式进行迭代,我使用了迭代器
Log::channel('webhook')->debug($message);
然后我使用内置函数next()和previous进行迭代
teamIterator = data.listIterator()
此方法的问题在于,在列表的开头单击“下一步”时,必须先单击两次,然后在执行“下一步”并想转到上一个之后,我必须在“上一个”上单击两次,这是不好的行为, 有什么方法可以避免next()不返回实际项,而只返回列表中的下一项?
答案 0 :(得分:0)
迭代器没有 current 元素的概念,因此您总是在元素之间,并且使用上述算法切换方向将导致元素重复。
您可以使用索引变量来跟踪当前元素索引,以便在切换方向时始终可以强制进行更改。
//Property
var currentIndex = 0
fun next() {
if (currentIndex < data.lastIndex) {
selectedTechnician.postValue(data[++currentIndex])
}
}
fun previous() {
if (currentIndex > 0) {
selectedTechnician.postValue(data[--currentIndex])
}
}