SwiftDataStructures 0.3.0

SwiftDataStructures 0.3.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2016年2月
SPM支持SPM

Bryn Austin Bellomy维护。



  • 作者
  • bryn austin bellomy

SwiftDataStructures

安装

这是一个CocoaPod。目前,只有CocoaPods 0.36的预发布beta版能够与Swift代码一起工作。要安装它,请使用gem install cocoapods --pre

Podfile

pod 'SwiftDataStructures'

命令行

$ pod install

当前实现

  • OrderedDictionary:使用LinkedList实现,而不是Swift内置类型之一。这样可能会更快一些。
  • Stack:也使用LinkedList实现。
  • Queue:与Stack类似,这也已使用LinkedList实现。
  • List:一个基于LinkedList的抽象,它隐藏了使用LinkedListNode实现的细节。一个List的接口基本上与一个Array相同。
  • LinkedList(作为许多其他数据结构的基础)

即将推出

  • OrderedSet
  • Tree(我想知道人们会对哪些类型的树感兴趣使用)
  • 完整的测试套件
  • 性能测试

评论、想法和拉取请求都非常欢迎!

测试正在进行中,但任何对测试的贡献都会非常棒。甚至只是一双额外的眼睛都会有很大的帮助。

示例用法

您可以查看测试以获取更多信息(更好的说明正在不断完善)。不过所有这些都相当直观……这些类型都按预期工作。

LinkedList&T

初始化

// Empty list
let list = LinkedList<Int>()

// You can initialize a LinkedList using any type that conforms to Sequence
let someArray = [10, 20, 30]
let list = LinkedList<Int>(someArray)

let someSequence = SequenceOf([10, 20, 30])
let list = LinkedList<Int>(someSequence)

// LinkedList also implements ArrayLiteralConvertible
let list : LinkedList<Int> = [10, 20, 30]

LinkedListNode&T

LinkedList的元素是LinkedListNode对象,它是对存储在列表中类型T的简单盒子/包装。一个LinkedListNode有一个item属性来检索包装的值,以及previousnext指针来遍历列表。

public class LinkedListNode<T>
{
    public let item: T

    public private(set) var previous: LinkedListNode<T>?
    public private(set) var next:     LinkedListNode<T>?

    public init(_ theItem:T) {
        item = theItem
    }
}

访问元素

LinkedList 定义了一个下标获取器,以及 func at(index:Index) -> LinkedListNode,用于访问特定索引处的元素。当下标超出范围时,下标运算符将失败,而 at() 将简单地返回 nil

let someNode = list[2]
let someNode = list.at(2)

遍历列表

LinkedList 实现了 SequenceType,允许你使用 for...in 循环,以及其他许多功能。

for node in list {
    println("node.item = \(node.item)")
}

列表还维护着 firstlast 指针。

list.first // an optional LinkedListNode<T>
list.last  // an optional LinkedListNode<T>

查找特定项

let foundNode = list.find { $0.item == 1337 } // returns an optional LinkedListNode<T>
foundNode?.item // == 1337 (or nil if the node wasn't found)

操作列表

注意: LinkedListIndex 类型是简单的 Int

添加新元素(appendprepend

list.append(LinkedListNode(30))
list.prepend(LinkedListNode(30))
list.insert(LinkedListNode(30), atIndex:5)

删除元素

let removed = list.removeAtIndex(3) // removed == the removed LinkedListNode object

贡献者 / 作者

bryn austin bellomy < [email protected] >