arrays - 将一个数组中的对象随机替换到另一个数组中。 swift 4

标签 arrays swift for-loop random set

两个数组

let array1 = ["A","B","C","D","E","F","G"]

let array2 = ["a","b","c","d","e","f","g"]

我想从 array2 中选择一个索引,并将 array1 中相同索引处的对象替换为 array2 中的对象。例如

array1[3] = array2[3] //["A","B","C","d","E","F","G"]

例如,我想随机执行此操作

let randomIndex: Int = Int(arc4random()) % (array2.count)

我想在“for”循环中执行此操作,直到使用 array2 的所有索引和对象,但我不想重复 randomIndex。

如果我在每次迭代后减少对象的数量,我仍然可以获得相同的随机索引。如果我使用一组索引,并删除使用的索引,我就会失去“有序性”(如果这是一个词)。

所以我似乎被困住了。顺便说一句,swift 4 的 .randomElement 不适用于字符串数组。

有什么想法吗?

for object in array2 {

  let randomIndex: Int = Int(arc4random()) % (array2.count)
  array1[randomIndex] = array2[randomIndex]
  array2.remove(at: randomIndex)
  }

上面的内容并没有按照我的意愿工作。当对象被删除时,会建立一个新的顺序,并且我无法在适当的索引处替换 array1 中的对象。

我错过了一些明显的东西,但我没有看到它。我使用的是 Swift 4.2。

最佳答案

这看起来效率很低,但是有效:

let array1 = ["A","B","C","D","E","F","G"]
let array2 = ["a","b","c","d","e","f","g"]
var array3 = array1                       // ["A","B","C","D","E","F","G"]
var counterSet = Set<Int>()               // empty set

while counterSet.count < array2.count {
  let randomIndex: Int = Int(arc4random()) % (array2.count)    //(16 times)
  counterSet.insert(randomIndex)                               //(16 times)
  array3[randomIndex] = array2[randomIndex]                    //(16 times)
}
counterSet                                // {2, 4, 6, 5, 0, 1, 3}
array3                                    // ["a", "b", "c", "d", "e", "f", "g"]

我仍然想要一些意见。谢谢库尔特

关于arrays - 将一个数组中的对象随机替换到另一个数组中。 swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51369197/

相关文章:

java - 如何将此 FOR 循环转换为 WHILE 循环,以便它也计算辅音? (Java)

c - 在c中反转字符串数组的两种不同方法

c - 将数组(结构成员)传递给函数

ios - 在 Xcode 上索引文本

objective-c - 桥接头是否有可能将 (void (^)(NSError *))block (ObjC) 变成 block : () throws -> () (Swift)?

ios - 如何将变量的值用作 UILabel?

c++ - 为什么 char 数组类型的类成员在成员函数中突然变成 const char 数组类型?

javascript - 在 Javascript 中创建带有键的数组

c++ - For 循环中奇怪的 LLVM 无符号到有符号转换

java - 寻找快乐的数字