【发布时间】:2017-09-12 04:36:39
【问题描述】:
请参考以下代码:
import UIKit
struct Item {
var brandId = 1
var name: String = ""
}
struct Store {
var areaName = ""
var name: String = ""
}
let itemArray = [Item(brandId: 1, name: "item1"), Item(brandId: 2, name: "item2"), Item(brandId: 1, name: "item3") ]
let storeArray = [Store(areaName: "hk", name: "store1"), Store(areaName: "bj", name: "store2"), Store(areaName: "hk", name: "store3")]
var intKeys = [Int]()
var groupedItems = [[Item]]()
var stringKeys = [String]()
var groupedStores = [[Store]]()
extension Array {
func transTo2d() -> [[Element]] {
let grouped = [[Element]]()
return grouped
}
}
itemArray.forEach { (item) in
let brandId = item.brandId
if !intKeys.contains(brandId) {
intKeys.append(brandId)
var newArray = [Item]()
newArray.append(item)
groupedItems.append(newArray)
} else {
let index = intKeys.index(of: brandId)!
groupedItems[index].append(item)
}
}
我的最终目标是可以使用itemArray.transTo2d() 获取基于项目brandId 的二维数组,使用storeArray.transTo2d() 获取基于商店areaName 的二维数组。我不知道如何根据键将反一维数组的函数泛型为二维数组?
【问题讨论】:
-
您的最终目标是在创建的每个商店中都有一个商品列表吗?如果是,为什么不直接做
struct Store { var areaName = "" var name: String = "" var items:[Item] = [] }。如果没有,您能否详细说明 -
Item和Store之间有什么关系?此外,据我所知,在 Swift 中没有本地方法可以创建 2D 数组。您使用的是数组数组而不是二维数组。 -
不,
Store,Items没有任何关系。仅struct的 2 个示例,一个密钥是Int类型,一个密钥是String。我得到了storesArray和itemsArray,并想根据自己的密钥转换为二维数组,但共享相同的转换逻辑@Lamar -
是的,我的目标是为
Array编写一个扩展方法,将数组转换为数组数组(抱歉我不清楚array of array和2D array的区别),基于他们自己的钥匙。我写了一个函数来解决这个问题。但是我不怎么通用,Store,关键是String,分享函数@ebby94
标签: arrays swift generics generic-programming swift-protocols