0
は、次のコードを参照してください:paramsが異なるプロパティを持つ異なる構造体である関数を一般化する方法は?
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)
}
}
私の最終目標は、ストアのareaName
に基づいて2次元配列を取得storeArray.transTo2d()
を使用して、アイテムのbrandId
に基づいて2次元配列を取得itemArray.transTo2d()
を使用して可能性があります。私はキーに基づいて2次元配列にtrans 1d配列を汎用化する方法はありませんか?
は、作成される各ストアにアイテムのリストを持たせることですか?もしそうなら、 'struct Store {var areaName =" "var name:String =" "var items:[Item] = []}'を実行するだけではどうですか?あなたがもっと詳しく説明できない場合 – Lamar
'Item'と' Store'の関係は何ですか?また、私が知る限り、Swiftに2D配列を作成するネイティブな方法はありません。あなたが使用しているのは、配列の配列であり、2D配列ではありません。 – ebby94
いいえ、 '' 'Store'''、' 'Items'''は関係がありません。 '' 'struct''のちょうど2つの例は、' '' 'Int''型で、キーは' 'String'''です。私はstoresArray、itemsArrayを持っていて、自分のキーに基づいて2次元配列に変換したいのですが、同じ変換ロジックを共有します@Lamar –