如何使用具有不同对象的“重复:计数:”初始化数组? [复制]

Posted

技术标签:

【中文标题】如何使用具有不同对象的“重复:计数:”初始化数组? [复制]【英文标题】:How to initialize an array using `repeating:count:` with distinct objects? [duplicate] 【发布时间】:2016-11-14 01:03:26 【问题描述】:

令人惊讶的是,下面的代码打印出SAME,而初始化程序每次都应该调用Z() 构造函数。如何使用此方法对 Z 的不同实例初始化数组?

import Foundation

class Z 
    var i: Int = 0


var z: [Z] = [Z](repeating: Z(), count: 10)

if z[0] === z[1] 
    print("SAME")
 else 
    print("NOT SAME")

【问题讨论】:

【参考方案1】:

我为此做了一个扩展!

extension Array     
    /// Create a new Array whose values are generated by the given closure.
    /// - Parameters:
    ///     - count:            The number of elements to generate
    ///     - elementGenerator: The closure that generates the elements.
    ///                         The index into which the element will be
    ///                         inserted is passed into the closure.
    public init(generating elementGenerator: (Int) -> Element, count: Int) 
        self = (0..<count).map(elementGenerator)
    


class Z 
    var i: Int = 0


let z = Array(generating:  _ in Z() , count: 10)

print(z)

【讨论】:

self.indices 返回零。 你能告诉我你的测试用例吗? 我刚刚用init(generating elementGenerator): (Int) -&gt; Element, count: Int) 修正了拼写错误(称为生成)并用let z = [Z](generating: _ in Z() , count: 10) 尝试了它。数组为空。 不走运。 self.indices 在您的 init 中返回一个空范围。我用 Swift 3.1 测试过。 哦,是的,我在玩它,忘了提到那部分。现在已经修好了。

以上是关于如何使用具有不同对象的“重复:计数:”初始化数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何解析具有相同键的不同数据类型的改造对象的json数组

我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?

在循环中创建多个具有不同名称的对象以存储在数组列表中

如何在java中的每个arraylist中创建具有不同类型对象的arraylist数组?

在对象中创建一个具有不同数组元素的新数组[关闭]

在 C++ 中使用 memset 初始化具有不同值的结构数组元素