微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使链表实例可通过索引和可迭代访问

如何解决使链表实例可通过索引和可迭代访问

我正在开发一个可以为链表实现数组函数的库。

我想使用 linkedlistobject[i] 按索引获取一个值,并使用 linkedlistobject[i] = x 按索引更改一个值。

如何使我的类可迭代?例如,在 Python 中,可以使用一些魔法函数使其可迭代(如果我没记错的话,它是 __iter__)。 如何创建可与 [ ] 表示法一起使用的可迭代对象?

解决方法

通过索引访问值的可能性与使对象可迭代不同。在 Python 中也是如此:实现 {{form.management_form}} {% for i in form %} <p>{{ i.instance.readonly_field }}</p> {{i.as_p}} {% endfor %} 不会提供通过索引访问值的可能性。

所以这里有两个不同的概念。我们可以通过实现 Symbol.iterator 生成器方法使对象可迭代。我们可以通过使用 Proxy 设置属性访问陷阱来提供索引访问。

以下演示提供了一个链表,其中包含以下方法:

  • __iter__:将获取指定索引处的节点。当代理检测到正在访问的属性表示一个整数(索引)时,将调用此方法。与数组相反,负整数也将被解释为索引,从列表的后面开始计数。

  • _nodeAt:允许对列表的值进行迭代。

  • Symbol.iterator:就像数组一样,可以采用可变数量的值,这些值将被添加到列表中。当构造函数被赋予一个或多个值来初始化链表时,它会调用此方法。与 Array 构造函数相反,仅提供一个值并没有特殊的长度含义。

  • push:就像数组一样,这是一个 getter/setter。但是,它不允许将列表扩展到比现有长度更长的长度。

  • length:由箭头字符分隔的字符串表示。

一个实例只维护对头节点的引用。它不跟踪当前长度也不跟踪尾节点。这可能是以后添加的一个选项,但也会增加开销。

该演示说明了如何构造列表、如何通过索引访问值、如何通过索引修改以及可以迭代:

toString

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。