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的方法,请参见例如:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。