Rub*_*ben 5 arrays sorting swift
假设我有这段代码:
class Stat {
var statEvents : [StatEvents] = []
}
struct StatEvents {
var name: String
var date: String
var hours: Int
}
var currentStat = Stat()
currentStat.statEvents = [
StatEvents(name: "lunch", date: "01-01-2015", hours: 1),
StatEvents(name: "dinner", date: "02-01-2015", hours: 2),
StatEvents(name: "dinner", date: "03-01-2015", hours: 3),
StatEvents(name: "lunch", date: "04-01-2015", hours: 4),
StatEvents(name: "dinner", date: "05-01-2015", hours: 5),
StatEvents(name: "breakfast", date: "06-01-2015", hours: 6),
StatEvents(name: "lunch", date: "07-01-2015", hours: 7),
StatEvents(name: "breakfast", date: "08-01-2015", hours: 8)
]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法获得具有如下输出的数组:
- [0]
- name : "lunch"
- date
- [0] : "01-01-2015"
- [1] : "04-01-2015"
- [2] : "07-01-2015"
- hours
- [0] : 1
- [1] : 4
- [2] : 7
- [1]
- name : "dinner"
- date
- [0] : "02-01-2015"
- [1] : "03-01-2015"
- [2] : "05-01-2015"
- hours
- [0] : 2
- [1] : 3
- [2] : 5
- [2]
- name : "breakfast"
- date
- [0] : "06-01-2015"
- [1] : "08-01-2015"
- hours
- [0] : 6
- [1] : 8
Run Code Online (Sandbox Code Playgroud)
如您所见,最终数组应按“名称”后代进行分组。@oisdk 你能检查一下吗?
最终结果的类型为 [[String : AnyObject]],或者您创建一个新的 structtype 来保存这些值,结果的类型为 [String : NewStructType]:
struct NewStructType
{
var dates: [String]?
var hours: [Int]?
}
Run Code Online (Sandbox Code Playgroud)
因此,您必须做出决定,然后必须编写自己的函数来对 StatEvents 对象进行排序和分组。也许您可以优化其性能,但这是如何实现第二个版本(使用 NewStructType)的第一个想法:
var result = [String : NewStructType]()
for statEvent in currentStat.statEvents
{
if (result[statEvent.name] != nil)
{
var newStructType = result[statEvent.name]!
newStructType.dates.append(statEvent.date)
newStructType.hours.append(statEvent.hours)
}
else
{
result[statEvent.name] = NewStructType(dates: [statEvent.date], hours: [statEvent.hours])
}
}
Run Code Online (Sandbox Code Playgroud)