Неясно, какова цель, но вот способ сделать то, что я думаю вы пытаетесь сделать. Обратите внимание на использование структур, а не кортежей:
let d = [ // your data
1549424985: ["amount": "10.0", "symbol": "XRP"],
1546531017: ["amount": "1.0", "symbol": "ETH"],
1549424153: ["amount": "50.0", "symbol": "EOS"],
1546531031: ["amount": "200.0", "symbol": "XRP"]
]
struct Trade {
let amount:Double
let symbol:String
}
var result = [String:[Trade]]()
for key in d.keys {
let date = Date(timeIntervalSince1970: Double(key))
let f = DateFormatter()
f.dateFormat = "yyyy-MM-dd"
let dayString = f.string(from: date)
let val = d[key] as! [String:String]
let trade = Trade(
amount: Double(val["amount"]!)!,
symbol: val["symbol"]!
)
result[dayString, default:[]].append(trade)
}
После этого result
будет:
["2019-02-06": [Trade(amount: 10.0, symbol: "XRP"), Trade(amount: 50.0, symbol: "EOS")],
"2019-01-04": [Trade(amount: 1.0, symbol: "ETH"), Trade(amount: 200.0, symbol: "XRP")]]
... что кажется "правильным" ответом. Лично я думаю, что глупо использовать строки дат таким образом; было бы лучше использовать фактические даты. В этом случае последняя часть может быть переписана как:
var result = [Date:[Trade]]()
for key in d.keys {
let date = Date(timeIntervalSince1970: Double(key))
let day = Calendar(identifier: .gregorian).startOfDay(for: date)
let val = d[key] as! [String:String]
let trade = Trade(
amount: Double(val["amount"]!)!,
symbol: val["symbol"]!
)
result[day, default:[]].append(trade)
}