【问题标题】:How do I access a lazy sequence with an index? [duplicate]如何使用索引访问惰性序列? [复制]
【发布时间】:2020-07-07 03:37:30
【问题描述】:

我今天注意到关于惰性序列的这种行为:

// filtered will be [2, 4, 6, 8]
let filtered = [1,2,3,4,5,6,7,8].lazy.filter { $0 % 2 == 0 }
print(filtered[2]) // expecting 6, but prints 3

我明白为什么它给了我 3。下标可能只知道惰性包装器底层的序列,因此它从原始未过滤序列返回元素。但是,否则我将如何访问第三个元素?

上下文:

我正在从 Realm 查询结果构建一个表视图,我应用了一个额外的过滤器,因为 Realm 不支持我尝试执行的过滤器。因此我现在有一个LazyFilterSequence<Results<MyRealmObject>>。在cellForRowAt 中,我需要按索引访问惰性序列,以便知道在每个表格单元格中显示什么。

【问题讨论】:

标签: swift lazy-sequences


【解决方案1】:

您可以通过与access a string by an integer 类似的方式访问它们,即使用index(_:offsetBy:)

filtered[filtered.index(filtered.startIndex, offsetBy: 2)]

访问惰性过滤器序列与访问字符串非常相似,因为两者都不是 O(1)。

或者,删除前 n 个项目,然后访问第一个项目:

filtered.dropFirst(2).first

但我更喜欢第一个,因为“丢弃”东西只是为了访问一个集合,在我看来,这很奇怪。

【讨论】:

  • @matt 但是你将不得不使用“基于 1 的索引”,不是吗?我认为这是导致大量错误的秘诀,但也许这只是我...... :)
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 2011-11-03
  • 2012-10-23
  • 1970-01-01
  • 2018-05-15
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多