リンクリストを使用してハッシュテーブルを実装する途中です。 合計3つのクラスがあります。Swiftで固定サイズの配列を初期化するときにエラーが発生しました
class HashNode<Key: Hashable, Value> {
var key: Key
var value: Value
var next: HashNode?
init(key: Key, value: Value) {
self.key = key
self.value = value
}
}
class HashTableBucket<Key: Hashable, Value> {
typealias Node = HashNode<Key, Value>
var head: Node?
var tail: Node?
func addNode(newNode: Node) {
//code
}
func findNode(key: Key) -> Node?{
//code
}
}
struct HashTable<Key: Hashable, Value> {
private typealias Bucket = HashTableBucket<Key, Value>
private var buckets: [Bucket]
private(set) public var count = 0
private(set) public var capacity = 0
init(capacity: Int) {
assert(capacity > 0)
buckets = Array<Bucket>(repeating: [], count: capacity)
}
//other code
}
私はハッシュテーブルインスタンスを初期化するときに、Iがゼロ値とバケット(又はHashTableBucket)の一種である固定サイズのアレイを作りたいです。私は本質的にしたいと思う[[], [], [], [], []]
私は、buckets = Array<Bucket>(repeating: [], count: capacity)
行にエラーが発生しています。エラーは、
Playground execution failed: error: HashTable.xcplaygroundpage:163:19: error: cannot invoke initializer for type 'Array<HashTableBucket<Key, Value>>' with an argument list of type '(repeating: [Any], count: Int)'
buckets = Array<Bucket>(repeating: [], count: capacity)
^
HashTable.xcplaygroundpage:163:19: note: expected an argument list of type '(repeating: Element, count: Int)'
buckets = Array<Bucket>(repeating: [], count: capacity)
ここで間違っていますか?
私は簡単な質問があります。バケットを初期化すると、配列内の5つのアイテムはすべて同じインスタンスを共有しますか? – user7418039
@ user7418039:確かに、Bucketはクラスです(と私はそれについて考えていたはずです)。 - 可能な解決策については、https://stackoverflow.com/questions/32921425/swift-creating-an-array-with-a-default-value-of-distinct-object-instancesを参照してください。 –