Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何";链接“;两个射程齐头并进_Swift_Range - Fatal编程技术网

Swift 如何";链接“;两个射程齐头并进

Swift 如何";链接“;两个射程齐头并进,swift,range,Swift,Range,我有一个生成随机数输出的函数(见下文)。我想让它从0-50或150-400中选择输出,但不能介于两者之间。我自己找不到太多关于它的信息。。。所以,如果你们中的任何人可以发布资源或答案,那将是非常棒的!非常感谢 这三个问号是我假设某个操作员会去的地方 func random() -> UInt32 { var range = UInt32(0)...UInt32(50) ??? UInt32(150)...UInt32(400) return range.st

我有一个生成随机数输出的函数(见下文)。我想让它从0-50或150-400中选择输出,但不能介于两者之间。我自己找不到太多关于它的信息。。。所以,如果你们中的任何人可以发布资源或答案,那将是非常棒的!非常感谢

这三个问号是我假设某个操作员会去的地方

func random() -> UInt32 {
        var range = UInt32(0)...UInt32(50) ??? UInt32(150)...UInt32(400)
        return range.startIndex + arc4random_uniform(range.endIndex - range.startIndex + 1)
}

我尝试使用+运算符和|运算符,但没有成功。

范围的另一种选择是使用while循环,以确保获得所需范围内的值

func randomFunc() -> UInt32 {
    var rand: UInt32 = 401
    while rand < 0 || rand > 400 || (rand > 50 && rand < 150){
        rand = arc4random_uniform(400)
    }
    return rand;
}
func randomFunc()->UInt32{
变量rand:UInt32=401
而兰特<0 | |兰特>400 | | |(兰特>50&兰特<150){
rand=arc4random_均匀(400)
}
返回兰特;
}

范围的另一种选择是只使用while循环,以确保获得所需范围内的值

func randomFunc() -> UInt32 {
    var rand: UInt32 = 401
    while rand < 0 || rand > 400 || (rand > 50 && rand < 150){
        rand = arc4random_uniform(400)
    }
    return rand;
}
func randomFunc()->UInt32{
变量rand:UInt32=401
而兰特<0 | |兰特>400 | | |(兰特>50&兰特<150){
rand=arc4random_均匀(400)
}
返回兰特;
}

不能将范围的并集传递给
arc4random\u uniform()

您可以在单个间隔内创建一个随机数,然后将不在第一个范围内的所有数字“调整”到第二个范围:

func random() -> UInt32 {
    var x = arc4random_uniform(302) // 0 .. 301
    if (x > 50) {
        // map 51 .. 301 to 150 .. 400:
        x += 99
    }
    return x
}
这可以推广到多个范围(现在更新为Swift 3):

func随机数(fromRanges:Range…)->UInt32{
设totalLength=ranges.reduce(0){$0+($1.upperBound-$1.lowerBound)}
var rnd=arc4random_均匀(总长度)
对于范围中的范围{
如果rnd
不能将范围的并集传递给
arc4random\u uniform()

您可以在单个间隔内创建一个随机数,然后将不在第一个范围内的所有数字“调整”到第二个范围:

func random() -> UInt32 {
    var x = arc4random_uniform(302) // 0 .. 301
    if (x > 50) {
        // map 51 .. 301 to 150 .. 400:
        x += 99
    }
    return x
}
这可以推广到多个范围(现在更新为Swift 3):

func随机数(fromRanges:Range…)->UInt32{
设totalLength=ranges.reduce(0){$0+($1.upperBound-$1.lowerBound)}
var rnd=arc4random_均匀(总长度)
对于范围中的范围{
如果rnd
这当然不是什么新鲜事,但我还没有找到重复的。我希望至少Swift的实现是新的。这当然不是新的,但我还没有找到重复的。我希望,至少快速实施是新的。