arrays - 按指定键的键和最后一个值过滤字典对象数组
问题描述
假设以下数据:
var randomData = [[0: 0.0], [0: 0.005399568], [0: 0.031317495], [0: 0.059395213], [0: 0.08531314], [0: 0.111231074], [0: 0.13066952], [0: 0.15010796], [0: 0.16954641], [0: 0.18898486], [0: 0.21058308], [0: 0.23002152], [0: 0.25593945], [0: 0.2753779], [0: 0.28833687], [0: 0.29697624], [0: 0.30129582], [0: 0.3056155], [0: 0.3056155], [0: 0.30777532], [0: 0.30777532], [0: 0.30993518], [0: 0.3142548], [0: 0.3142548], [0: 0.3142548], [0: 0.3142548], [0: 0.3142548], [0: 0.3142548], [0: 0.3142548], [2: 0.0010798806], [2: 0.072354175], [2: 0.072354175], [2: 0.12203024], [2: 0.1717062], [2: 0.21922246], [2: 0.26889843], [2: 0.30993518], [2: 0.3423326], [2: 0.36393085], [2: 0.3790496], [2: 0.39200857], [2: 0.40280774], [2: 0.41144702], [2: 0.42224622], [2: 0.4265659], [2: 0.4330454], [2: 0.43736497], [2: 0.44168466], [2: 0.44384444], [2: 0.44600433], [2: 0.4524838], [2: 0.46544278], [2: 0.47840175], [2: 0.4892008], [2: 0.4978402], [2: 0.50431967], [2: 0.50647944], [2: 0.50647944], [2: 0.50647944], [2: 0.50647944], [2: 0.50647944], [2: 0.51079917], [2: 0.5172786], [2: 0.5215982], [2: 0.5237581], [2: 0.5237581], [2: 0.5237581], [2: 0.5237581], [2: 0.5237581], [4: 0.0], [4: 0.07451397], [4: 0.07451397], [4: 0.10691138], [4: 0.1393088], [4: 0.1738661], [4: 0.20842329], [4: 0.24298048], [4: 0.28401726], [4: 0.32073426], [4: 0.35529158], [4: 0.3790496], [4: 0.39848804], [4: 0.41144702], [4: 0.42224622], [4: 0.4287257], [4: 0.4330454], [4: 0.43736497], [4: 0.44600433], [4: 0.4524838], [4: 0.46760258], [4: 0.48056152], [4: 0.4978402], [4: 0.51295894], [4: 0.5237581], [4: 0.5280777], [4: 0.53455716], [4: 0.54319656], [4: 0.54967606], [4: 0.5539956], [4: 0.55831534], [4: 0.562635], [4: 0.57343405], [4: 0.57991356], [4: 0.58639306], [4: 0.5907127], [4: 0.5907127], [4: 0.5907127], [4: 0.5928725], [4: 0.5928725], [4: 0.5928725], [5: 0.003239675], [5: 0.09179262], [5: 0.09179262], [5: 0.1393088], [5: 0.1738661], [5: 0.19330454], [5: 0.20842329], [5: 0.21706256], [5: 0.22570194], [5: 0.2343412], [5: 0.24298048], [5: 0.25161988], [5: 0.26241893], [5: 0.2775378], [5: 0.29265654], [5: 0.3034557], [5: 0.3142548], [5: 0.31857446], [5: 0.32073426], [5: 0.32073426], [5: 0.32073426], [5: 0.32073426], [5: 0.32073426], [5: 0.32073426]]
我将如何将 randomData 过滤到一个变量 [[Int: Float]] 中,该变量返回每个键的最后一个对象。换句话说,预期的结果将是:
[[0: 0.3142548], [2: 0.5237581], [4: 0.5928725], [5: 0.32073426]]
我认为逻辑是为每个键创建数组,然后获取最后一个元素,并将其重新用于数组,但这只是拉最后一个元素,而不是每个键的最后一个元素
let filtered = randomData.filter({$0.keys == $0.keys}).last
// Optional([5: 0.32073426])
let filtered = randomData.map({$0.filter({$0.key == $0.key})}).last
//Optional([5: 0.32073426])
一如既往地感谢任何建议和指导。
解决方案
这可以通过根据内部字典键对元素进行分组,然后选择每个组的最后一个元素来完成
let selected = Dictionary(grouping: randomData, by: { $0.keys.first })
.compactMap { $0.value.last }
正如@Alexander 在评论中所建议的那样,这可以更直接地使用Dictionary(_:uniqueKeysWith:)
let selected = Dictionary(randomData.flatMap { $0 }, uniquingKeysWith: {
return $0 > $1 ? $0 : $1
})
这两种解决方案产生的结果略有不同,第一个是字典数组,第二个是字典,如下所示
第一个解决方案: [[2: 0.5237581], [4: 0.5928725], [5: 0.32073426], [0: 0.3142548]]
第二个解决方案: [0: 0.3142548, 5: 0.32073426, 4: 0.5928725, 2: 0.5237581]
推荐阅读
- python - 我怎样才能一遍又一遍地问一个问题,直到用户猜出数字
- python - 有没有办法从 tkinter gui 调用海龟屏幕?
- reactjs - 有什么方法可以将完整的网页呈现为 React 应用程序中的组件?
- angular - node_modules/@angular/material/card/typings/card-module.d.ts(12,55) 中的错误
- javascript - 单击时复制文本并随后显示小弹出窗口 - 扩展代码
- firebase - 在 web javascript 中为多个数据库初始化时,firebase 实时数据库实例之一未经过身份验证
- python - 如何将不带引号的字符串转换为python数组?
- c - 是否可以将函数参数存储在指向函数的指针中?
- javascript - 在画布中自动生成像素行星
- python-3.x - 如何将浮点数转换为任何浮点数的 XE-Y