For loop 省道-获取for循环中的下一个元素
我使用这个for循环:For loop 省道-获取for循环中的下一个元素,for-loop,dart,For Loop,Dart,我使用这个for循环: for (var elem in sortedTokens){ if (elem.identifier == "ACCESSOR"){ // } else if (elem.identifier == "PROPERTY"){ // Check the identifier of the next element } } 我如何才能访问其中的下一个元素?到目前为止,我一直使用带有Dart索引的while循环。
for (var elem in sortedTokens){
if (elem.identifier == "ACCESSOR"){
//
}
else if (elem.identifier == "PROPERTY"){
// Check the identifier of the next element
}
}
我如何才能访问其中的下一个元素?到目前为止,我一直使用带有Dart索引的while循环。正确的做法是什么
谢谢您可能需要使用常规for循环:
for (int i = 0; i < sortedTokens.length; i++){
var elem = sortedTokens[i];
if (elem.identifier == "ACCESSOR"){
//
}
else if (elem.identifier == "PROPERTY"){
if (i+1 < sortedTokens.length) {
var nextElem = sortedTokens[i+1];
// Check the identifier of the next element
}
}
}
for(int i=0;i
但您可以更进一步,包装该功能:
void forEach<T>(List<T> list, void action(T current, T next)) {
for (var i = 0; i < list.length; i++) {
T current = list[i];
T next = i+1 < list.length ? list[i+1] : null;
action(current, next);
}
}
forEach (sortedTokens, (elem, next) {
if (elem.identifier == "ACCESSOR"){
//
}
else if (elem.identifier == "PROPERTY"){
if (next != null) {
// Check the identifier of the next element
}
}
});
void forEach(列表,作废操作(T当前,T下一个)){
对于(变量i=0;i
工作示例
您可能希望使用常规for循环:
for (int i = 0; i < sortedTokens.length; i++){
var elem = sortedTokens[i];
if (elem.identifier == "ACCESSOR"){
//
}
else if (elem.identifier == "PROPERTY"){
if (i+1 < sortedTokens.length) {
var nextElem = sortedTokens[i+1];
// Check the identifier of the next element
}
}
}
for(int i=0;i
但您可以更进一步,包装该功能:
void forEach<T>(List<T> list, void action(T current, T next)) {
for (var i = 0; i < list.length; i++) {
T current = list[i];
T next = i+1 < list.length ? list[i+1] : null;
action(current, next);
}
}
forEach (sortedTokens, (elem, next) {
if (elem.identifier == "ACCESSOR"){
//
}
else if (elem.identifier == "PROPERTY"){
if (next != null) {
// Check the identifier of the next element
}
}
});
void forEach(列表,作废操作(T当前,T下一个)){
对于(变量i=0;i
工作示例 在处理当前元素时,无法在迭代中访问的下一个元素。 A
for in
类似于for(sortedTokens中的变量元素){…}
的循环大致相当于:
for(var it=sortedTokens.iterator;it.moveNext();){
var elem=电流;
...
}
如您所见,移动到下一个元素的moveNext
仅在当前元素的主体完成时执行
因此,在中使用时,如果不进行一些变通,就无法实现您想要的功能。in的优化用于为每个元素执行操作,而不是无序访问元素
最简单的解决方法就是使用索引。如果你真的需要向前看,向后看,或者在某些情况下加快步伐,这没有什么错
另一个解决办法是:
bool isProperty=false;
用于(分类托克中的var元素){
如果(iProperty){
//检查当前元素的标识符
isProperty=false;
继续;
}
if(elem.identifier==“访问器”){
//
}else if(elem.identifier==“属性”){
isProperty=true;
}
}
这只是在元素之间保持状态(这里它只是一个布尔值),所以下一个元素知道您想用它做什么。
在某些情况下,这是有用且方便的(例如构建逗号分隔的列表,您希望将第一个元素的特殊情况设置为不添加逗号),而在其他情况下,由于状态变得笨拙且逻辑复杂,这会带来更大的麻烦
在处理当前元素时,无法在
迭代中访问的下一个元素。
Afor in
类似于for(sortedTokens中的变量元素){…}
的循环大致相当于:
for(var it=sortedTokens.iterator;it.moveNext();){
var elem=电流;
...
}
如您所见,移动到下一个元素的moveNext
仅在当前元素的主体完成时执行
因此,在
中使用时,如果不进行一些变通,就无法实现您想要的功能。in的优化用于为每个元素执行操作,而不是无序访问元素
最简单的解决方法就是使用索引。如果你真的需要向前看,向后看,或者在某些情况下加快步伐,这没有什么错
另一个解决办法是:
bool isProperty=false;
用于(分类托克中的var元素){
如果(iProperty){
//检查当前元素的标识符
isProperty=false;
继续;
}
if(elem.identifier==“访问器”){
//
}else if(elem.identifier==“属性”){
isProperty=true;
}
}
这只是在元素之间保持状态(这里它只是一个布尔值),所以下一个元素知道您想用它做什么。
在某些情况下,这是有用且方便的(例如构建逗号分隔的列表,您希望将第一个元素的特殊情况设置为不添加逗号),而在其他情况下,由于状态变得笨拙且逻辑复杂,这会带来更大的麻烦 谢谢你的回答!谢谢你的回答!