如何检查数组中每个元素的条件?

时间:2016-06-20 22:38:16

标签: arrays swift loops if-statement control-flow

我有一段代码,只有在数组中的每个元素都满足某些条件时才能运行。目前,我必须知道任何代码的数组长度,但我的最终目标是让它适用于任何长度的数组。

我目前的代码:

if (rand[0] == someInt && rand[1] == someInt && . . . && rand[n] == someInt) {

    *do some things*

}

我希望这工作不知道rand的长度。

4 个答案:

答案 0 :(得分:2)

在Swift 3中,使用first(where:),这非常简单:

extension Sequence {
    func allPass(predicate: (Iterator.Element) -> Bool) -> Bool {
        return first(where: { !predicate($0) }) == nil
    }
}

在Swift 2.2中,它类似:

extension SequenceType {
    func allPass(predicate: (Generator.Element) -> Bool) -> Bool {
        for element in self {
            if !predicate(element) { return false }
        }
        return true
    }
}

在任何一种情况下,当它们找到第一个失败的元素时,它们会立即返回false。

答案 1 :(得分:2)

一个常见的实现是使用对contains的基本转换和两个否定:

// all equal to someInt <=> there is none that is not equal to someInt
if !(rand.contains { $0 != someInt }) {
  ...
}

extension Sequence {
    public func allSatisfy(where predicate: (Self.Iterator.Element) throws -> Bool) rethrows -> Bool {
        return try !self.contains { element throws -> Bool in
            return try !predicate(element)
        }
    }
}

if (rand.allSatisfy { $0 == someInt }) {
  ...
}

但是,此方法最终已添加到Swift 4.2(Xcode 10+,请参阅SE-207)中的Swift标准库中,因此不需要扩展。

答案 2 :(得分:1)

试试这个:

if rand.reduce(true, combine: {$0 && $1 == someInt})
{
    print("do some thing")
}

reduce函数允许你提供一个初始值和一个闭包,它将该类型的值和数组的元素映射到与初始值相同类型的值,然后它将该函数应用于该值中的每个值。阵列。所以这只是将数组中每个元素与所需值进行比较的结果。从概念上讲,这相当于你最初写的。

如果你没有看到0美元和1美元,他们可能会混淆;它们只是你提供的用于减少的匿名闭包的参数,在这种情况下,$ 0是一个布尔值,$ 1是数组的一个元素。

答案 3 :(得分:1)

除了$items = mysqli_query($con, "SELECT DISTINCT item FROM table"); echo "<ul class='tab'>"; while ($row = mysqli_fetch_array($items) { echo "<li><a href='#' onclick='myFunction(".$row['item'].")'>".$row['item']."</a></li>"; } echo "</ul>" 之外,您可能还想了解<script src='scripts/jquery-3.0.0.js'></script> <script src='scripts/global.js'></script> <script> $(document).ready(function() { $('#menu').load('php/getMenu.php'); }); </script> ,如果您关心&#34;其他&#34;这可能会有所帮助。案例或衡量你与成功的接近程度。例如:

reduce