Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 省道-获取for循环中的下一个元素_For Loop_Dart - Fatal编程技术网

For loop 省道-获取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循环:

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;
}
}
这只是在元素之间保持状态(这里它只是一个布尔值),所以下一个元素知道您想用它做什么。 在某些情况下,这是有用且方便的(例如构建逗号分隔的列表,您希望将第一个元素的特殊情况设置为不添加逗号),而在其他情况下,由于状态变得笨拙且逻辑复杂,这会带来更大的麻烦

在处理当前元素时,无法在
迭代中访问的下一个元素。 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;
}
}
这只是在元素之间保持状态(这里它只是一个布尔值),所以下一个元素知道您想用它做什么。
在某些情况下,这是有用且方便的(例如构建逗号分隔的列表,您希望将第一个元素的特殊情况设置为不添加逗号),而在其他情况下,由于状态变得笨拙且逻辑复杂,这会带来更大的麻烦

谢谢你的回答!谢谢你的回答!