Swift在填充时保持数组顺序

时间:2018-03-16 21:34:58

标签: arrays swift

所以,我有一个名为allBusinesses的类型BusinessClass的二维数组。我按以下方式填充此数组:

allBusinesses[0].append(contentsOf: [B11, B12, B13, B14, B15, B16])
allBusinesses[1].append(contentsOf: [B21, B22, B23, B24, B25, B26])

其中B11B12 ... B26都是BusinessClass个实例。

我有另一个名为BusinessClass的2D myOwnedBusinesses数组。我按照以下方式创建它:

var myOwnedBusinesses: [[BusinessClass]] = [[], []]

在我的应用程序中,我有一个tableView,其中包含allBusinesses的所有元素,其中每个部分都包含数组第二维的行,因此:allBusinesses[section][row]。当我在tableView中选择一个随机单元格时,相应的BusinessClass元素将按以下方式添加到myOwnedBusinesses数组中:

myOwnedBusinesses[selectedSection].append(allBusinesses[selectedSection][selectedRow])

正如您可以想象的那样,如果我在第0行第3行选择单元格,然后在第0行第2行选择单元格,myOwnedBusinesses的顺序将是错误的,相反allBusinesses是什么。作为结论,我想在两个数组之间保持相同的顺序,即使myOwnedBusinesses数组并不总是被填充。

1 个答案:

答案 0 :(得分:0)

这是我的解决方案

let section0 = ["a", "b", "c", "d", "e", "f"]
let section1 = ["h", "i", "j", "k", "l", "m"]
section0.index(of: "b")
var all:[[String]] = [[],[]]
all[0].append(contentsOf: section0)
all[1].append(contentsOf: section1)

保持原始索引变平原始数组

let all_flat = all.flatMap {$0}

假设用户按此顺序选择单元格:“d”,“e”,“a”,“h”,“m”和“k”。

var myArray = [["d", "e", "a"], ["h", "m", "k"]]

然后对myArray

中的每个数组进行排序
myArray = myArray.map {
    $0.sorted { str1, str2 in
        return all_flat.index(of: str1)! < all_flat.index(of: str2)!
    }
}

对于你的情况:

let allBusinesses_flat = allBusinesses.flatMap {$0}
myOwnedBusinesses = myOwnedBusinesses.map {
    $0.sorted { b1, b2 in
        return all_flat.index(of: b1)! < all_flat.index(of: b2)!
    }
}

这种解决方案价格昂贵,记忆明智。存储选定的索引将是更可取的。