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个…)