swift – 需要一个算法来混洗5个数组的元素,每个数组都有相同的5
var E1 = ["A","B","C","D","E"] var E2 = ["A","E"] var E3 = ["A","E"] var E4 = ["A","E"] var E5 = ["A","E"] 每个阵列具有相同的五个元素,即“A”,“B”,“C”,“D”和“E”.我想编写一个算法来对所有数组中的元素进行排序,这样两个数组在同一个索引上就没有相同的元素(比如说“A”). 一种对我有用的示例输出将是: var E1 = ["A","E"] var E2 = ["B","E","A"] var E3 = ["C","A","B"] var E4 = ["D","C"] var E5 = ["E","D"] 我试图解决这个问题,但无法完成.我刚刚写了一个shuffling函数来排序两个数组(E1和E2)的元素. var E1 = ["A","E"] func shuffledArrays(var array1: [String],var array2: [String]) { if array1[0] == array2[0] || array1[1] == array2[1] || array1[2] == array2[2] || array1[3] == array2[3] || array1[4] == array2[4] { shuffled1 = GKRandomSource.sharedRandom().arrayByShufflingObjectsInArray(array1) shuffled2 = GKRandomSource.sharedRandom().arrayByShufflingObjectsInArray(array2) var array3 = shuffled1 as! [String] var array4 = shuffled2 as! [String] } else { var array3 = array1 var array4 = array2 } array1 = array3 array2 = array4 } // Now calling the function on arrays E1 and E2 shuffledArrays(E1,array2: E2) print(E1) print(E2) 使用此代码,我在Xcode Playground上收到以下错误.虽然有时错误被删除并且输出在第102和103行是正确的,但我仍然无法提取输出并将其永久保存到E1和E2中.请帮我整理算法,排列五个阵列的元素. 谢谢 解决方法
由于你知道数组E1,…,E5保持相同的条目(按相同的顺序),你不需要显式保持数组E2到E5(因为你知道它们的值等于E1).
因此,您可以简单地定义一个移位函数,并通过重复移动前一个数组来创建E2到E5. import GameplayKit func shiftByOne (arr: [String]) -> [String] { var shiftedArr = arr shiftedArr.insert(shiftedArr.popLast()!,atIndex: 0) return shiftedArr } var E1 = ["A","E"] E1 = GKRandomSource.sharedRandom().arrayByShufflingObjectsInArray(E1) as! [String] var E2 = shiftByOne(E1) var E3 = shiftByOne(E2) var E4 = shiftByOne(E3) var E5 = shiftByOne(E4) /** Result without initial shuffle: E1 = ["A","E"] E2 = ["B","A"] E3 = ["C","B"] E4 = ["D","C"] E5 = ["E","D"] */ 这个方法从E1开始(可能只改组这个数组),并保证E2到E5构造成所有不同的,w.r.t.订单,彼此. 正如下面的R Menke所指出的,如果你对数组E1进行混洗,则会保持相同的行为(但是使用了混洗的初始数组).在这里,我使用了与你的例子相同的shuffler,但是对于更加Swifty的方法,请参见例如: > How do I shuffle an array in Swift? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |