我有一段代码,只有在数组中的每个元素都满足某些条件时才能运行。目前,我必须知道任何代码的数组长度,但我的最终目标是让它适用于任何长度的数组。
我目前的代码:
if (rand[0] == someInt && rand[1] == someInt && . . . && rand[n] == someInt) {
*do some things*
}
我希望这工作不知道rand
的长度。
答案 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