【问题标题】:How to generate random string form array of elements by compared with another array of elements in swift?如何通过与swift中的另一个元素数组进行比较,从元素数组中生成随机字符串?
【发布时间】:2025-12-20 14:30:11
【问题描述】:

我知道从字符串中获取随机字符。来自here的是代码,

func randomString(_ length: Int) -> String {

    let master = Array("abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ_123456789".characters) //0...62 = 63
    var randomString = ""

    for _ in 1...length{

        let random = arc4random_uniform(UInt32(master.count))
        randomString.append(String(master[Int(random)]))
    }
    return randomString
}

用法:

var randomArray1 = [String]()

for _ in 0...62{

   randomArray1.append(self.randomString(1))
}

这里,如果randomArray1.append(self.randomString(x)),那么x = 1...N

检查重复元素:

var sameElementCatcher = [String]()

for x in 0...62{

    let element = randomArray1[x]
    randomArray1[x] = ""
    if randomArray1.contains(element){
        sameElementCatcher.append(element)
    }
}

print("Same Elements")
print(sameElementCatcher.count != 0 ? sameElementCatcher : "Array count is zero")

输出:

相同的元素

[“_”、“u”、“8”、“7”、“E”、“P”、“u”、“y”、“C”、“-”、“C”、“x ", "l", "j", “t”、“D”、“U”、“2”、“e”、“2”]

但我需要从 master 中获取 62 个唯一随机字符的数组,与 randomArray1 进行比较。即,数组计数为零

我怎样才能毫不拖延地做到这一点?

注意:

另外,我阅读了this 的帖子,我还有一个answer 用于洗牌数组。但是这个帖子不同于单纯的洗牌,请看usage

【问题讨论】:

  • 您确定*.com/questions/24026510/… 不能解决您的问题吗? master.characters.shuffled() 不是你需要的吗?
  • @MartinR,是的,兄弟不是master.characters.shuffled()。我需要生成像firebase这样的随机密钥。 randomArray1.append(self.randomString(1)) 只是一个例子。我也可以使用randomArray1.append(self.randomString(6))
  • 总结。您需要生成一个所有字符都是唯一的随机文本吗?
  • import GameKitlet randomNumber = GKRandomSource.sharedRandom().nextInt(upperBound: master.count) return master[randomNumber].description 对于随机字符串试试这个可能会有所帮助
  • @MidhunKMohan ,好的兄弟,我会尽力让你知道

标签: arrays swift swift3


【解决方案1】:

你试过这样吗? 我从你的问题中了解到。 generate a random text where all the characters are unique。 在将随机字符串附加到数组之前,请检查数组是否包含 char 然后附加到您的数组中。

func randomString(_ length: Int) -> String {
let master = Array("abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ_123456789".characters) //0...62 = 63
var randomString = ""

for _ in 1...length{

    let random = arc4random_uniform(UInt32(master.count))
    randomString.append(String(master[Int(random)]))
}
return randomString
}

var randomArray1 = [String]()
var tempRandomString = ""
let totalRandomCount = 62
var randomArrayCount = 0

while (totalRandomCount > randomArrayCount) {
    tempRandomString = randomString(1)
    if !randomArray1.contains(tempRandomString) {
        randomArray1.append(tempRandomString)
        randomArrayCount+=1
    }
}
print(randomArray1)

输出:["X", "u", "j", "1", "n", "E", "D", "q", "U", "6", "T", "O", "f", "J", "i", "c", "W", "V", "G", "R", "k", "7", "_", "8", "-", "l", "w", "4", "e", "Q", "C", "m", "M", "Y", "o", "S", "B", "2", "Z", "P", "p", "N", "y", "H", "a", "h", "z", "s", "b", "A", "3", "g", "x", "L", "v", "F", "d", "r", "t", "K", "9", "5"]

我在操场上试过这个。对于此输出,199 执行了次循环。

如果有人比这个更了解你的更新。

【讨论】:

  • 是的,你是对的。生成唯一的随机文本。感谢您的努力。朋友:)
  • 谢谢兄弟,我从你的回答中得到了关键:)
  • 乐于助人。如果您没有完全使用此方法,请分享您的答案。