加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 需要一个算法来混洗5个数组的元素,每个数组都有相同的5

发布时间:2020-12-14 04:49:13 所属栏目:百科 来源:网络整理
导读:我有以下五个阵列 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”.我想编写一个算法来对所有数组中的元素进行排序,这样两个数组在

This is the image

我有以下五个阵列

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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读