我正在尝试通过我拥有的示例项目来学习Scala。其中有一个变量记录定义为:
val records: Iterator[Product2[K, V]]
它以不同的方式传递。我使用以下方法探索其内容:
records.foreach(println)
但是,当我尝试使用此迭代器再次打印内容时,即使在连续的代码行中,也没有结果。似乎迭代器被消耗了。如何防止它发生并能够探索迭代器的内容而不会使其对其余代码无用?
答案 0 :(得分:7)
Iterator
扩展TraversableOnce
,因此只能迭代一次,因为它代表了Iterable
的变异指针。如果你想要一些可以反复遍历并且不影响多个并行访问的东西,你需要使用Iterable
代替Traversable
,foreach
和Iterator
创建一个新的$('#editable').on( 'keyup', addID );
var count = 0; // this will absolutely ensure that ID will be unique
function addID(){
var previousIDs = [];
$('#editable *').each(function() {
count++;
var thisID = $(this).attr( 'id' );
// let's check if we have duplicates:
var index = 0, len = previousIDs.length, isDuplicate = false;
for( index = 0; index < len; index++ ){
if ( thisID === previousIDs[index] ) {
isDuplicate = true;
break;
}
}
// now change the ID if needed:
if ( isDuplicate || ! thisID ){
var t = GenerateID();
var newID = 'id-' + t + '-' + count;
$(this).attr('id', newID);
previousIDs.push( newID );
}else{
previousIDs.push( thisID );
}
});
}
}对于特定的上下文