我有一个充满nil的空数组,我将填充整数数组,并希望查看它何时不再包含nil值。
我需要检查是否存在nil所以如果存在则可以添加int,如果没有nil值则停止游戏。
var smallestArr = [Int?](count: 25, repeatedValue: nil)
if smallestArr.contains(nil){
//add ints until it doesn't contain anymore nil
}else{
//end game
}
答案 0 :(得分:7)
而不是
{
"_id" : 5,
"product" : 3,
"store" : 2
"key": [
{
"attribute": "xxxxxxx",
"name": "book",
"additionaPrice": "xxxx",
"file": "xxxx" ,
}
]
}
把这个:
if smallestArr.contains(nil) {
斯威夫特4:
if smallestArr.contains{$0 == nil} {
另一种方式:
if smallestArr.contains(where: {$0 == nil}) {
答案 1 :(得分:1)
您可以尝试这样的事情:
var smallestArr = [Int?](count: 25, repeatedValue: nil)
var updatedArr = smallestArr.map { (val) -> Int in
if(val == nil){
//change this value to the int that you want to replace nil with
return -1;
}
else{
return val!;
}
}
updatedArr将使用所有“nil”替换为“-1”的数组,并且所有其他值保持不变。
在给出这个答案之后,我觉得你应该按照以下方式初始化你的数组:
var smallestArr = [Int?](count: 25, repeatedValue: -1)
因此,你将完全避免零,并防止进入致命的错误状态!!
答案 2 :(得分:0)
Array
类型不是堆栈。它不是固定长度,所以如果你试图用有效的Int值逐步替换nil,期望最终所有的nils都被推出,你就错了。虽然这不是你的问题,但考虑到你的代码样本似乎暗示了理解。
[](repeatedValue:count:)
是一种方便的方法,可以多次初始化具有相同值的数组。它与创建数组和一系列append
方法调用相同,它不会为数组提供特殊功能,FIFO或其他。
答案 3 :(得分:0)
另一种可能的解决方案,使用reduce
计算非零条目数(并与长度进行比较):
var smallestArr = [Int?](count: 25, repeatedValue: nil)
// ...
if(smallestArr.reduce(0) {(tot,num) in tot + (num == nil ? 0 : 1) } == smallestArr.count) {
// end game
}
else {
//add ints until it doesn't contain anymore nil
}
但是我刚看到matt:s .contents
和.flatMap
解决方案;我相信他的答案是最好的。