代码之家  ›  专栏  ›  技术社区  ›  Scaraux

Swift数组非常慢(在字典中使用时)

  •  3
  • Scaraux  · 技术社区  · 6 年前

    数组 斯威夫特 得出的结论是,在添加元素时,这些元素的速度非常慢。

    我观察这些问题主要是当我在一个应用程序中使用数组时 Dictionary

    var array = [String : [String]]

    因此,我决定对一个非常简单的 array 使用操场测试,认为问题来自 数组 本身:

    var arr = [Int]()
    
    for i in 0..<1_000_000 {
        arr.append(i)
    }
    

    C级# 带着一个真正的 List ,甚至不需要一点时间 第二

    IList list = new List<int>();
    
    for (int i = 0; i < 1000000; i++) {
       list.Add(i);
    }
    

    我知道Swift中的数组不像其他语言中的列表那样可以灵活地选择 ArrayList LinkedList . Swift,每次添加新元素时都会重新分配,基本上会将所有数组放在更大的空间中。

    我们怎样才能解决这个问题?

    编辑1: 哈米什指出,使用Xcode操场环境是一个糟糕的性能跟踪想法。他是对的,斯威夫特 arrays 当不在操场上使用时,速度和C#一样快。

    编辑2: 数组 不是因为 数组 但只有在使用 在字典里

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mohmmad S    6 年前

    .append 函数,它必须创建位置,然后填充,

    尝试这个代码给了我一个稍微快一点的结果。

    var arr = [Int].init(repeating: 0, count: 1_000_000)
    
    for i in 0..<1_000_000 {
        arr[i] = i
    }
    

    这是一个使用操场,但操场是极其缓慢的表现相比,一个 command-line 工具或实际项目, 但是这个代码在操场上稍微快一点。