![](/img/trans.png)
[英]How can I compare two Arrays in Swift and mutate one of the arrays if two Items are the same
[英]Swift 5 How can I hash two arrays
如何使此代碼 SWIFT 接受? 我有兩個 arrays 類型的任何一個數組的值都應該作為鍵,另一個作為適當的值:
let it_tt_ar = db.pair(keys: "int_test", values: "text_test");
func _pair<K : Hashable, V>(keys: [K], values: [V]) -> Dictionary<K,V> {
var result = Dictionary<K, V>();
for i in 0...(keys.count - 1) {
result[keys[i]] = values[i];
}
return result;
}
func pair (keys: String?, values: String?) -> Dictionary<Int32,Any> {
if let _keys = keys, let _values = values {
let result = _pair(keys: hashtable[_keys] as! [Int32], values: hashtable[_values]!);
return result;
} else {
return [:];
}
}
如果密鑰的類型未知,我將無法正常工作。 我想這樣寫:
let it_tt_ar = db.pair<Int32,String>(keys: "int_test", values: "text_test");
or
let it_tt_ar = db.pair(keys: "int_test", values: "text_test", kt:(Int32.self,String.self));
... in the last case by catching kt: in the function
但似乎沒有機會贏得 SWIFT:
它是可怕的! 您想編寫應用程序邏輯,但 80% 的開發時間都浪費在必須滿足這些規則上!
看起來您正在嘗試將一對 arrays 轉換為字典,而不管數組的類型如何(當然,前提是鍵數組元素的類型是可散列的)。 這是一種方法:
let k : [Int] = [1,2,3]
let v : [String] = ["one", "two", "three"]
func pair<Key, Value>(keyArray keys:[Key], valueArray values:[Value]) -> Dictionary<Key,Value> where Key:Hashable {
zip(keys,values).reduce(into: Dictionary<Key,Value>()) {
(dict, tuple) in dict[tuple.0] = tuple.1
}
}
let result = pair(keyArray: k, valueArray: v)
print(result) // [1: "one", 2: "two", 3: "three"], in some order
找到了一個適合我的解決方案:
var db = try DataBaseSqlite(dbfile: "test.db");
try db.select(sql: "int_test, real_test, text_test from stest");
var it = db.valueByKey(key: "int_test");
var rt = db.valueByKey(key: "real_test");
var tt = db.valueByKey(key: "text_test");
let it_tt_ar = db.pair(keys: "int_test", values: "text_test", kt: Int32.self);
let tt_it_ar = db.pair(keys: "text_test", values: "int_test", kt: String.self);
try db.close();
func _pair<K : Hashable, V>(keys: [K], values: [V]) -> Dictionary<K,V> {
var result = Dictionary<K, V>();
for i in 0...(keys.count - 1) {
result[keys[i]] = values[i];
}
return result;
}
func pair<T>(keys: String?, values: String?, kt: T.Type) -> Dictionary<T,Any> {
if let _keys = keys, let _values = values {
let result = _pair(keys: hashtable[_keys] as! [T], values: hashtable[_values]!);
return result;
} else {
return [:];
}
}
由於 Swift 中缺乏真正的哈希表支持(就像 c# 一樣),我的哈希表只是 <String,Array> 的字典,它是由 select 方法自動構建的。 因此,從應用程序的角度來看,我可以編寫更高效和通用的代碼來查詢 sqlite 數據庫。
dbValueByKey() 返回列值的類型化(請求)數組,而 pair() 僅返回兩列的組合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.