当前位置: 首页 > 面试题库 >

致命错误:Swift 2.0不支持与自身交换位置

子车海
2023-03-14
问题内容

我有这个扩展,它将创建一个新数组,该数组具有从给定数组中随机组成的数组组:

extension Array {
    var shuffle:[Element] {
        var elements = self
        for index in 0..<elements.count {
            swap(&elements[index], &elements[ Int(arc4random_uniform(UInt32(elements.count-index)))+index ])
        }
        return elements
    }
    func groupOf(n:Int)-> [[Element]] {
        var result:[[Element]]=[]
        for i in 0...(count/n)-1 {
            var tempArray:[Element] = []
            for index in 0...n-1 {
                tempArray.append(self[index+(i*n)])
            }
            result.append(tempArray)
        }

        return result
    }
}

我正在这样使用它:

let mainArr = Array(1...60)
let suffeldArr = mainArr.shuffle.groupOf(10)
print(suffeldArr)

它会像这样打印:

[[10 random element between 1 to 60], [10 random element between 1 to 60], [10 random element between 1 to 60], [10 random element between 1 to 60], [10 random element between 1 to 60], [10 random element between 1 to 60]]

但这在运行时在此行给我一个错误:

swap(&elements[index], &elements[ Int(arc4random_uniform(UInt32(elements.count-index)))+index ])

其中说:

致命错误:不支持与自身交换位置

它在1.2中工作正常,但现在在2.0中不工作。

我不知道该怎么解决。


问题答案:

您尝试与其自身交换元素,则需要执行检查以查看是否不尝试将元素交换至数组中的同一位置,如下所示:

extension Array {
    var shuffle:[Element] {
        var elements = self
        for index in 0..<elements.count {
            let newIndex = Int(arc4random_uniform(UInt32(elements.count-index)))+index
            if index != newIndex { // Check if you are not trying to swap an element with itself
                swap(&elements[index], &elements[newIndex])
            }
        }
        return elements
    }
    func groupOf(n:Int)-> [[Element]] {
        var result:[[Element]]=[]
        for i in 0...(count/n)-1 {
            var tempArray:[Element] = []
            for index in 0...n-1 {
                tempArray.append(self[index+(i*n)])
            }
            result.append(tempArray)
        }

        return result
    }
}


 类似资料:
  • 问题内容: 我从数据库中获取信息,将其保存在数组中,并以具有循环结构的形式回显它,当我尝试将修改后的信息保存到数据库时遇到问题。 我收到此错误: 致命错误:字符串中不支持[]运算符。 码: 有人可以给我一个提示我做错了什么吗? 谢谢。 问题答案: 尝试在字符串上使用短数组推送语法时,会出现此错误。 例如这个 我大胆猜测的一个或多个你的,,或变量已经被初始化为一个字符串。 编辑: 再次查看您的问题,

  • 在macOS Catalina 10.15.4上,我安装了jdk-10.0.1。 当我进入终端并输入: 标准输出: Java版本: 创建了一个示例maven项目,并将JUnit 5设置为依赖项: 计算器类: JUnit 5测试: 当我通过Terminal或IntelliJ IDEA Ultimate Edition 2019.3(作为Maven run config

  • 我试图通过以下教程将我们的在线WordPress网站克隆到localhost(使用XAMPP):https://looks-awesome.com/copying-live-wordpress-site-localhost 一切都很容易理解,顺利进行,直到我试图加载网站。每当我试图打开索引时。php或wp管理员向我显示此错误:“致命错误:未捕获错误:[]C:\xampp\htdocs中的字符串不支

  • 所以我在这篇文章中发现了错误。我尝试升级gradle,但在使用不受支持的gradle版本时出现了另一个错误,因此我返回到4.4.2版本。 现在,我知道这是另一个问题的重复,但这个问题仍然存在,并且在较新版本的gradle和idea中尚未解决。此外,我不想使用包装。 我收到的错误: Gradle版本:4.4.2 IntelliJ IDEA版本:2018.3.5 您可以在这里找到一个测试项目来重现该问

  • 问题: 在我的应用程序中,我想通过cordova wkwebview访问图像。超文本标记语言元素如下所示。 加载时,我收到错误“加载资源失败:不支持的URL”。我正在使用iOS 10.2。 验证/尝试的事情: 如果选中文件夹“MyFolder”下的“cordova.file.dataDirectory”中存在的文件列表,我确实看到那里存在“file.jpg”。它的本机URL为文件:///var/m

  • 我试图制作我的第一个应用程序(hello world),并在手机上运行它,但当我单击run时,gradle返回了这个错误(我在这里研究了stackoverflow并试图关闭即时运行,但在我的情况下似乎不起作用): 后来编辑2:我想通了,我的电脑上安装了一个旧的jdk版本和最新的android studio,谢谢你的帮助。我只需要安装最新的jdk版本(8)