天天一个设想形式·迭代器形式

博主按:《天天一个设想形式》旨在开端体会设想形式的精华,现在采纳
javascript
靠这用饭)和
python
地道喜好)两种言语完成。固然,每种设想形式都有多种完成体式格局,但此小册只纪录最直接了当的完成体式格局 :)

0. 项目地点

1. 什么是迭代器形式?

迭代器形式是指供应一种要领递次接见一个鸠合对象的各个元素,使用者不须要相识鸠合对象的底层完成。

迭代器形式罕见和经常使用的有:内部迭代器、外部迭代器、倒序迭代器等等。

2. 内部迭代器和外部迭代器

内部迭代器:封装的要领完整接办迭代历程,外部只须要一次挪用。

外部迭代器:用户必需显式地要求迭代下一元素。熟习C++的朋侪,能够类比C++内置对象的迭代器的 end()next()等要领。

3. 代码完成

3.1 python3 完成

python3的迭代器能够用作for()轮回和next()要领的对象。同时,在完成迭代器的时刻,能够在借助天生器yield。python会天生传给yeild的值。

def my_iter():
  yield 0, "first"
  yield 1, "second"
  yield 2, "third"

if __name__ == "__main__":
  # 要领1: Iterator能够用for轮回
  for (index, item) in my_iter():
    print("At", index , "is", item)
  
  # 要领2: Iterator能够用next()来盘算
  # 须要借助 StopIteration 来停止轮回
  _iter = iter(my_iter())
  while True:
    try:
      index,item = next(_iter)
      print("At", index , "is", item)
    except StopIteration:
      break

3.2 ES6 完成

这里完成的是一个外部迭代器。须要完成边境推断函数、元素猎取函数和更新索引函数。

const Iterator = obj => {
  let current = 0;
  let next = () => current += 1;
  let end = () => current >= obj.length;
  let get = () => obj[current];

  return {
    next,
    end,
    get
  }
}

let myIter = Iterator([1, 2, 3]);
while(!myIter.end()) {
  console.log(myIter.get())
  myIter.next();
}

4. 参考资料

    原文作者:心谭
    原文地址: https://segmentfault.com/a/1190000017180456
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞