小编sve*_*ena的帖子

Swift 3和自定义链接列表集合类型的索引

在Swift 3中,Collection索引必须符合Comparable而不是Equatable.

全文可以在这里阅读swift-evolution/0065.

这是一个相关的引用:

一般的索引可以与一个或两个整数的是有效地从一个数据结构的根编码路径元件来表示.由于人们可以自由选择"路径"的编码,我们认为可以选择它以使指数具有廉价可比性.已经为所有执行标准库所需的索引,和其他几个人,同时研究这种变化我们调查的情况.

在我的自定义链表集合的实现中,节点(指向后继节点)是不透明的索引类型.但是,给定两个实例,不可能判断一个是否先于另一个实例,而不会冒着遍历链的重要部分的风险.

我很好奇,你如何实现Comparable具有O(1)复杂性的链表索引?

我目前唯一的想法是以某种方式计算步骤,同时推进索引,将其作为属性存储在索引类型中,然后比较这些值.

此解决方案的严重缺点是,在变更集合时,索引必须无效.虽然这对于数组来说似乎是合理的,但我不想打破链表有的巨大好处 - 它们不会使未更改节点的索引无效.

编辑: 它可以以两个额外的整数为代价来完成,作为集合属性,假设单个链表实现前插入,前删除后添加.无论如何,任何干涉中间都会打破O(1)复杂性要求.

ios swift

14
推荐指数
1
解决办法
485
查看次数

从字符串初始化单元

我正在寻找Unit(symbol: String)一种可以识别而不是定义符号的初始化器。

这是一个代码段,通过提供有限的解决方案来说明我的问题。

尽管下面的解决方案有效,但如果Apple在即将到来的iOS更新中发布新的单元,则显式列出Foundation框架中预定义的所有单元将很繁琐,并且不具有隐式的前向兼容性。

func matchedUnit<S: Sequence>(symbol: String, valid sequence: S) -> S.Iterator.Element? where S.Iterator.Element: Unit {
    let symbols = sequence.map { $0.symbol };
    let candidate = zip(sequence, symbols).first {
        return $0.1 == symbol;
        }?.0
    return candidate;
}

let knownUnitsOfLength = [UnitLength.meters, UnitLength.centimeters, UnitLength.kilometers, UnitLength.decimeters];

if let aUnit = matchedUnit(symbol: "dm", valid: knownUnitsOfLength) {
    let measurement = Measurement(value: 1, unit: aUnit);
}
Run Code Online (Sandbox Code Playgroud)

也许我错过了SDK中一个显而易见的难题-一种识别符号而不是定义符号的初始化程序?

更新:

已确认没有Apple提供的API来执行此操作。我最终使用Objective-C运行时来查找所有继承自其名称NSDimension开头的所有类属性并对其进行迭代的类NSUnit。我映射了所有符号,类和属性名称,并可以NSUnit …

cocoa-touch objective-c foundation ios swift

6
推荐指数
1
解决办法
603
查看次数

如何序列化 boost::accumulators::accumulator_set&lt;&gt;?

如今,每个人都关心保护用户隐私及其数据。能够对数据进行统计分析,而无需实际将数据样本保留超过必要的时间,这是朝着正确方向迈出的坚实一步。

boost库中累加器的概念看起来非常适合实现这一目标。

累加器框架是用于执行增量计算的框架。该框架的使用遵循以下模式:

用户accumulator_set<>一次将一个样本推送到对象中。

accumulator_set<>以尽可能最有效的方法计算请求的数量,解决请求的计算之间的依赖性,并可能缓存中间结果。

只有一个大问题。我不知道如何序列化累加器实例,以便我可以保留它,而无需在应用程序启动之间保留示例数据。

如何创建实例并恢复其应用新样本并继续增量计算所需的所有必要参数?我不想从头开始,也不想保留以前的样本。

c++ boost

5
推荐指数
1
解决办法
387
查看次数

标签 统计

ios ×2

swift ×2

boost ×1

c++ ×1

cocoa-touch ×1

foundation ×1

objective-c ×1