如何提取swift 3字典的子集

     2023-03-04     283

关键词:

【中文标题】如何提取swift 3字典的子集【英文标题】:How to extract a subset of a swift 3 Dictionary 【发布时间】:2017-01-04 18:45:49 【问题描述】:

我查看了methods here,但找不到我要找的东西。我是 Swift 的新手。我想根据一组键值从字典中提取一个子集,最好没有循环。

例如,如果我的键 Set 的类型为 Set<String>,并且我有一个类型为 Dictionary<String, CustomObject> 的字典,我想创建一个类型为 Dictionary<String, CustomObject> 的新字典,其中仅包含与字符串集中的键。

我可以看到我可以使用for 循环来执行此操作,方法是初始化一个新的Dictionary<String, CustomObj>(),检查原始字典是否包含集合中每个字符串的值,并将键值对添加到新字典.不过,我想知道是否有更有效/更优雅的方式来做到这一点。

如果有更好的方法来使用键数组来查找子集,我愿意使用字符串数组而不是 Set。

非常感谢!

【问题讨论】:

@AntonBronnikov 谢谢,你能澄清一下 - “这样做”是指迭代过程吗? 【参考方案1】:

Swift 5 - 你可以很简单地做到这一点:

let subsetDict = originalDict.filter( mySet.contains($0.key))

结果是一个新字典,其类型与原始字典相同,但只包含与 mySet 中的键对应的键值对。

【讨论】:

【参考方案2】:

你的假设是正确的,有一种更简洁/快速的方式来完成你需要的。

例如,您可以通过reduce 来实现,这是 Swift 中可用的函数式编程概念:

let subDict = originalDict.reduce([String: CustomObject]()) 
    guard mySet.contains($1.key) else  return $0 
    var d = $0
    d[$1.key] = $1.value
    return d

或者,分两步,首先过滤有效元素,然后用过滤后的元素构造回字典:

let filteredDict = originalDict.filter  mySet.contains($0.key) 
    .reduce([CustomObject]()) var d = $0; d[$1.key]=$1.value; return d 

forEach也可以用来构造过滤字典:

var filteredDict = [CustomObject]()
mySet.forEach  filteredDict[$0] = originalDict[$0] 

,但是结果会很好,因为它是不可变的:

let filteredDict: [String:CustomObject] =  
    var result = [String:CustomObject]()
    mySet.forEach  filteredDict2[$0] = originalDict[$0] 
    return result
()

【讨论】:

这可能看起来“swift-ish”但非常无效,因为在每个归约步骤中都会创建一个新字典。比较airspeedvelocity.net/2015/08/03/…。 @MartinR 你是对的,我已经添加了一些不应该遇到这个问题的解决方案。顺便说一句,感谢文章链接,非常有见地。 完美,正是我想要的。谢谢!【参考方案3】:

虚拟类型:

struct CustomObject 
    let foo: Int
    init(_ foo: Int)  self.foo = foo 

如果您想根据一组给定的键以“相交”方式改变原始字典(而不是创建新字典):

let keySet = Set(["foo", "baz"])
var dict = ["foo": CustomObject(1), "bar": CustomObject(2),
            "baz": CustomObject(3), "bax": CustomObject(4)]

Set(dict.keys).subtracting(keySet).forEach  dict.removeValue(forKey: $0) 

print(dict) // ["foo": CustomObject(foo: 1), "baz": CustomObject(foo: 3)]

【讨论】:

如何在swift 3中找到数组包含字典的数组索引?

】如何在swift3中找到数组包含字典的数组索引?【英文标题】:HowtofindindexofArraywhichthearraycontainsdictionariesinswift3?【发布时间】:2016-11-2412:31:04【问题描述】:如果我像这样定义数组意味着vartempArray=[String]()tempArray=["Hai","Hello","Howar... 查看详情

如何在swift 3中从字典中获取数组

】如何在swift3中从字典中获取数组【英文标题】:howtogetarrayfromdictionaryinswift3【发布时间】:2016-12-0111:51:34【问题描述】:我不明白如何从字典中获取数组,我已经尝试过这段代码,但我只想获取数组的内容和类型这是我的数组w... 查看详情

我们如何在 swift 2.3 中将值附加到包含 3 个元素的字典中?

】我们如何在swift2.3中将值附加到包含3个元素的字典中?【英文标题】:Howdoweappendvaluestodictionarycontaining3elementsinswift2.3?【发布时间】:2017-02-1311:58:40【问题描述】:我正在尝试将值附加到我这样声明的字典中。varsetHomIconDict:[(ico... 查看详情

如何在删除每个字典的子集时合并字典对

】如何在删除每个字典的子集时合并字典对【英文标题】:Howtomergepairsofdictionarieswhiledroppingasubsetofeachdictionary【发布时间】:2017-06-2320:16:44【问题描述】:问题陈述:我正在使用python3.5并且喜欢新的字典合并语法:merged=**A,**B但... 查看详情

Python - 如何有效地遍历字典的子集?

】Python-如何有效地遍历字典的子集?【英文标题】:Python-Howtoefficientlyiteratethroughthesubsetsofadictionary?【发布时间】:2017-08-2304:35:48【问题描述】:我有一本包含500个DateFrame的字典。每个数据框都有列\'date\'、\'num_patients\'。我将模... 查看详情

如何使用新的 Swift 3 和 Alamofire 解析 JSON(字典和数组)

】如何使用新的Swift3和Alamofire解析JSON(字典和数组)【英文标题】:HowtopasreJSON(dictionaryandarray)usingthenewSwift3andAlamofire【发布时间】:2017-09-1107:38:51【问题描述】:任何人都可以建议并向我发送获取JSON响应的示例代码。我以NSDicti... 查看详情

如何检查一个字典是不是是另一个更大字典的子集?

】如何检查一个字典是不是是另一个更大字典的子集?【英文标题】:Howtocheckifonedictionaryisasubsetofanotherlargerdictionary?如何检查一个字典是否是另一个更大字典的子集?【发布时间】:2012-03-0814:05:28【问题描述】:我正在尝试编写... 查看详情

如何使用 UserDefaults swift 3 提取 JobSeekerID

】如何使用UserDefaultsswift3提取JobSeekerID【英文标题】:HowcanIextracttheJobSeekerIDwithUserDefaultsswift3【发布时间】:2017-11-0216:32:27【问题描述】:我正在尝试使用userDefaults从我的api中获取jobSeekerID,但我的响应为nil。基本上,我正在做的... 查看详情

如何在 Alamofire,swift 3 中将字典作为参数发送

】如何在Alamofire,swift3中将字典作为参数发送【英文标题】:howtosendadictionaryasaparameterinAlamofire,swift3【发布时间】:2016-10-3106:11:20【问题描述】:我想发送下面的参数"serial_number":"type":"match","value":"somevalue"所以我就这样尝试letparam... 查看详情

如何在 Swift 3 中将字典表示为 NSValue?

】如何在Swift3中将字典表示为NSValue?【英文标题】:HowtoRepresentDictionaryasNSValueinSwift3?【发布时间】:2017-01-0801:46:18【问题描述】:我有以下字典:letexample:[String:(Int,Int)]=["test":(0,1)]我需要将其存储为NSData变量,为此必须首先将其... 查看详情

提取向量的向量子集

...ectors【发布时间】:2020-01-1410:56:24【问题描述】:我知道如何从法线向量中提取子集,以及如何从另一个向量中的向量中提取子集。我现在的问题是如何提取另一个向量内的所有向量的子集。例如:我在另一个向量中有三个向量... 查看详情

如何解析这个 JSON 口袋妖怪字典?口袋妖怪 API (swift 3)

】如何解析这个JSON口袋妖怪字典?口袋妖怪API(swift3)【英文标题】:HowcanIparsethisJSONPokemonDictionary?PokemonAPI(swift3)【发布时间】:2018-11-2505:36:15【问题描述】:我在解析来自新版PokemonAPI的JSON数据时遇到问题,特别是“type”键中的... 查看详情

如何在 Swift 3 中从数据中提取 Int16

】如何在Swift3中从数据中提取Int16【英文标题】:HowtoextractInt16fromDatainSwift3【发布时间】:2016-10-2622:48:46【问题描述】:几天来,我一直在尝试访问BLE服务特征值中的数据。我认为弄清楚如何将TemperatureSensor示例翻译成Swift会有所... 查看详情

如何从 Python 中的字典中提取所有值?

】如何从Python中的字典中提取所有值?【英文标题】:HowcanIextractallvaluesfromadictionaryinPython?【发布时间】:2011-10-2313:33:16【问题描述】:我有一本字典d=1:-0.3246,2:-0.9185,3:-3985,...。如何将d的所有值提取到l列表中?【问题讨论】:... 查看详情

swift 3.1 如何汇总异步获取属性

】swift3.1如何汇总异步获取属性【英文标题】:swift3.1Howtosumasyncfetchproperties【发布时间】:2017-03-2109:57:02【问题描述】:我无法计算异步提取中单个属性的计数,我想汇总给定异步提取的所有费用金额,但无法按模式申请我的实... 查看详情

如何使用 swift 从 JSON 中提取数据

】如何使用swift从JSON中提取数据【英文标题】:HowcanIpulldatafromJSONbyusingswift【发布时间】:2015-07-0808:28:30【问题描述】:我一直在尝试将JSON字符串转换为字典值,但我无法让它工作,我得到一个空值。在我尝试提取数据之前,我... 查看详情

条件正则表达式,如何提取匹配的子集?

】条件正则表达式,如何提取匹配的子集?【英文标题】:ConditionalRegex,howtoextractasubsetofamatch?【发布时间】:2013-08-0817:00:01【问题描述】:我有系统日志字符串,如下所示:lwiod[2469]:S-1-5-21-2071757552-4033313730-2397045981-3628|0xC94F000|LOG... 查看详情

如何从bigquery中的字符串中提取子集

】如何从bigquery中的字符串中提取子集【英文标题】:Howextractsubsetsfromstringinbigquery【发布时间】:2017-03-0615:02:02【问题描述】:我有一个由4个部分组成的字符串变量,看起来像这样:social_CA_FR_bloom_build或者这个:social_DE_bloom_trgj... 查看详情