Swift 如何将一本词典拆分为另一本词典
考虑到这本词典:Swift 如何将一本词典拆分为另一本词典,swift,dictionary,filter,Swift,Dictionary,Filter,考虑到这本词典: var dict = ["Steve": 17, "Marc": 38, "Xavier": 21, "Rolf": 45, "Peter": 67, "Nassim" : 87, "Raj": 266, "Paul": 220, "Bill": 392] 我需要创建类别
var dict = ["Steve": 17,
"Marc": 38,
"Xavier": 21,
"Rolf": 45,
"Peter": 67,
"Nassim" : 87,
"Raj": 266,
"Paul": 220,
"Bill": 392]
我需要创建类别对象的3个新实例:
class Category {
var name = ""
var note = 0
}
并使用var dict创建此对象的3个新实例(即:初级、中级、高级)
假设我已经知道前三名是初级,下三名是中级,最后三名是高级
谢谢,在通用字典中没有排序,所以您不能像在数组中一样迭代它。但你可以这样做:
let array = [("Steve", 17),
("Marc", 38),
("Xavier", 21),
("Rolf", 45),
("Peter", 67),
("Nassim", 87),
("Raj", 266),
("Paul", 220),
("Bill", 392)]
var dicts = [[String: Int]]()
for _ in 0..<3 {
dicts.append([String: Int]())
}
for i in 0..<array.count {
dicts[i % 3][array[i].0] = array[i].1
}
enum Seniority {
case junior, intermediate, senior
}
struct Worker {
var name: String
var score: Int
var seniority: Seniority
}
let seniors = workers.filter { $0.seniority == .senior }
let array=[(“Steve”,17),
(“马克”,38岁),
(“Xavier”,21岁),
(“Rolf”,45岁),
(“彼得”,67岁),
(“纳西姆”,87岁),
(“Raj”,266),
(“保罗”,220),
(“条例草案”,第392条)]
var dicts=[[String:Int]]()
对于uu0..如果您不打算更改输入数据(家庭作业?),这可能是您想要的:
import Foundation
var data = ["Steve": 17,
"Marc": 38,
"Xavier": 21,
"Rolf": 45,
"Peter": 67,
"Nassim" : 87,
"Raj": 266,
"Paul": 220,
"Bill": 392]
enum Seniority { case senior, junior, intermediate }
struct Worker {
let name: String
let note: Int
}
struct Category {
let seniority: Seniority
let staff: [Worker]
}
/* the partition is fixed, but at least sort by score to get it */
let all = data.sorted { (a, b) -> Bool in
return a.value < b.value
}
/* let's use some weird variable names to note the absurd of a hardcoded partition */
let _1_3 = all.prefix(3)
let _4_6 = all.suffix(from: 3).prefix(3)
let _7_9 = all.suffix(3)
let junior = Category(seniority: .junior, staff: _1_3.map { Worker(name: $0.key, note: $0.value) })
let intermediate = Category(seniority: .intermediate, staff: _4_6.map { Worker(name: $0.key, note: $0.value) })
let senior = Category(seniority: .senior, staff: _7_9.map { Worker(name: $0.key, note: $0.value) })
原始答复:
如果dict
(我将其重命名为staff
)中的数字是某种分数:
import Foundation
var staff = ["Steve": 17,
"Marc": 38,
"Xavier": 21,
"Rolf": 45,
"Peter": 67,
"Nassim" : 87,
"Raj": 266,
"Paul": 220,
"Bill": 392]
让我们在它们上定义一个分区:
let categories: [String:Any] = [
"junior" : (0...19),
"intermediate": (20..<100),
"senior": (100...)
]
我得到:
["intermediate": ["Nassim": 87, "Marc": 38, "Peter": 67, "Rolf": 45, "Xavier": 21],
"senior": ["Bill": 392, "Paul": 220, "Raj": 266],
"junior": ["Steve": 17]
]
您可以根据自己的具体需要轻松地对其进行调整。我可能会这样定义一个工人类:
let array = [("Steve", 17),
("Marc", 38),
("Xavier", 21),
("Rolf", 45),
("Peter", 67),
("Nassim", 87),
("Raj", 266),
("Paul", 220),
("Bill", 392)]
var dicts = [[String: Int]]()
for _ in 0..<3 {
dicts.append([String: Int]())
}
for i in 0..<array.count {
dicts[i % 3][array[i].0] = array[i].1
}
enum Seniority {
case junior, intermediate, senior
}
struct Worker {
var name: String
var score: Int
var seniority: Seniority
}
let seniors = workers.filter { $0.seniority == .senior }
然后,您可以将字典映射到工作数组(请注意,您必须使用名称,并且不能使用顺序,因为在Swift中):
例如,使用它,您可以检索一个仅由高级员工组成的数组,如下所示:
let array = [("Steve", 17),
("Marc", 38),
("Xavier", 21),
("Rolf", 45),
("Peter", 67),
("Nassim", 87),
("Raj", 266),
("Paul", 220),
("Bill", 392)]
var dicts = [[String: Int]]()
for _ in 0..<3 {
dicts.append([String: Int]())
}
for i in 0..<array.count {
dicts[i % 3][array[i].0] = array[i].1
}
enum Seniority {
case junior, intermediate, senior
}
struct Worker {
var name: String
var score: Int
var seniority: Seniority
}
let seniors = workers.filter { $0.seniority == .senior }
但每次执行代码时,您都会收到不同的dicts值您实际上可以在dictionary上迭代,但绝对不能保证顺序:对于dictionary{}(key,value)
就像我说的,您不能像在数组上一样迭代。您是如何构造源代码的?如果是手动完成的,那么最好是手动划分它们。不清楚您希望得到什么样的输出。类别中的注释是什么?分类中的dict
元素存储在哪里?dict最初来自JSON,分类中的注释是我认为这个问题听起来很熟悉的值。原来昨天也是你问的:谢谢,但我的需要更容易。我已经知道,按照听写的顺序,前三名是初级,后三名是中级,后三名是高级。我只需要创建3个新实例(初级和前3个,中级和后3个…)