【问题标题】:Array with multiple values per index?每个索引具有多个值的数组?
【发布时间】:2021-05-13 18:18:16
【问题描述】:

我学得很快,我参加了sololearn课程来获取一些知识,但是我碰到了一些我不明白的东西。
它是关于修改数组的值。有问题的部分陈述如下:

在以下示例中,索引为 1、2、3 的元素被替换为两个新值。

shoppingList[1...3] = [“Bananas”, “Oranges”] 

一维数组如何在每个索引中获取多个值?我如何访问它们?我是不是误会了什么?

【问题讨论】:

  • 对每个索引使用元组。 stackoverflow.com/a/25838682/14733292
  • 上述代码的作用与replaceSubrange 方法相同,您可以将任意数量的元素替换为另一个集合。

标签: swift swift4


【解决方案1】:

这段代码的作用是使用Array.subscript(_:) 替换1...3 范围内的shoppingList 元素

这意味着考虑这个数组:

var shoppingList = ["Apples", "Strawberries", "Pears", "Pineaples"]

与:

shoppingList[1...3] = ["Bananas", "Oranges"]

StrawberriesPearsPineaples 将被 BananasOranges 替换。

所以结果数组将是:ApplesBananasOranges

【讨论】:

  • 谢谢,这正是我不明白的!出于某种原因,我认为在 1 到 3 的范围内,每个元素都会变为“香蕉”和“橙子”,所以数组的每个索引都有两个值,这让我感到困惑。现在很清楚了!
【解决方案2】:

当您分配给数组中的一系列索引 (array[1...3]) 时,这些元素将从数组中删除,新元素将“插入”它们的位置。这可能会导致数组增长或缩小。

var array = Array(0...5)
// [0, 1, 2, 3, 4, 5]
array[1...3] = [-1, -2]
// [0, -1, -2, 3, 4]

请注意我们的数组长度现在是如何缩短了一个元素。

【讨论】:

    【解决方案3】:

    您可以使用元组 (Value, Value),或创建 struct 来处理您的值,事实上,如果您打算重用这对或值,struct 是可行的方法。

    顺便说一句,[1..3] 不用加,只需将值放在括号内即可。

    struct Value {
        var name: String
        var lastName: String
    }
    
    let values = [Value(name: "Mary", lastName: "Queen"), Value(name: "John", lastName: "Black")]
    
    // Access to properties
    let lastName = values[1].lastName
    
    // OR
    
    let tuples = [("Mary", "Queen"), ("John", "Black")]
    
    let lastNameTuple = tuples[1].1
    

    希望您喜欢 Swift!

    【讨论】:

    • 感谢您的示例!但我仍然很好奇 SoloLearn 给出的例子本身是否有意义?
    • 不需要任何元组,问题中的代码可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2019-12-24
    • 2015-01-22
    相关资源
    最近更新 更多