Swift 如何";链接“;两个射程齐头并进
我有一个生成随机数输出的函数(见下文)。我想让它从0-50或150-400中选择输出,但不能介于两者之间。我自己找不到太多关于它的信息。。。所以,如果你们中的任何人可以发布资源或答案,那将是非常棒的!非常感谢 这三个问号是我假设某个操作员会去的地方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
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的实现是新的。这当然不是新的,但我还没有找到重复的。我希望,至少快速实施是新的。