这是一个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
(我想知道人们会对哪些类型的树感兴趣使用)评论、想法和拉取请求都非常欢迎!
测试正在进行中,但任何对测试的贡献都会非常棒。甚至只是一双额外的眼睛都会有很大的帮助。
您可以查看测试以获取更多信息(更好的说明正在不断完善)。不过所有这些都相当直观……这些类型都按预期工作。
// 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]
LinkedList的元素是LinkedListNode
对象,它是对存储在列表中类型T
的简单盒子/包装。一个LinkedListNode
有一个item
属性来检索包装的值,以及previous
和next
指针来遍历列表。
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)")
}
列表还维护着 first
和 last
指针。
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)
注意: LinkedList
的 Index
类型是简单的 Int
。
添加新元素(append
和 prepend
)
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] >