gpt4 book ai didi

scala - Scala 中两个集合的并集

转载 作者:行者123 更新时间:2023-12-03 18:42:48 26 4
gpt4 key购买 nike

来自链接的问题 here ,我在 Scala 中找到了 Union 的这个实现:

def union(a: Set, b: Set): Set = i => a(i) || b(i)

而 Set 是一个类型的函数:
type Set = Int => Boolean

现在我明白了在Scala中,一个函数在这里从Int映射到Boolean,我进一步理解了这个语句是如何执行的:
a(i) || b(i)

但我不明白的是这里的“我”是什么。它从何而来?当它找到集合之间的匹配时,它返回true,如果确实如此,我在哪里过滤它?

最佳答案

Set (这只是一个函数)从 union 返回接受一些整数作为参数;你必须给它一个任意的名字,以便你可以在函数体中引用它。如果你这样写函数可能更有意义:

def union(a: Set, b: Set): Set = {
(i) => a(i) || b(i)
}

如果你这样写可能更有意义:
def union(a: Set, b: Set): Set = {
// The union of two sets is a new function that takes an Int...
def theUnion(i: Int): Boolean = {
// and returns true if EITEHR of the other functions are true
a(i) || b(i)
}

// Now we want to return the NEW function
theUnion
}

再次, i是任意的,可以用任何变量替换:
def union(a: Set, b: Set): Set = item => a(item) || b(item)

[更新]

因为我们将集合表示为函数,所以不需要迭代查看它们是否包含数字。例如,这里有一个包含 -5 以下任意数字的集合。 :
val belowNegFive: Set = (i) => i < -5

当我们用一个数字调用该函数时,它会告诉我们该数字是否在集合中。请注意,我们实际上从未告诉它集合中的具体数字:
scala> belowNegFive(10)
res0: Boolean = false

scala> belowNegFive(-100)
res1: Boolean = true

scala> belowNegFive(-1)
res2: Boolean = false

这是另一组,包括 50 之间的任意数字和 100 :
val fiftyToHundred: Set = (i) => i >= 50 && i <= 100

scala> fiftyToHundred(50)
res3: Boolean = true

scala> fiftyToHundred(100)
res4: Boolean = true

scala> fiftyToHundred(75)
res5: Boolean = true

scala> fiftyToHundred(49)
res6: Boolean = false

现在,集合的并集 belowNegFivefiftyToHundred将包含任何低于 -5 的数字 之间 50100 .我们可以通过返回一个新函数来轻松地在代码中表示这一点,如果其他两个函数中的任何一个返回 true,则该函数本身返回 true。
scala> val unionOfBoth: Set = (i) => belowNegFive(i) || fiftyToHundred(i)
unionOfBoth: Int => Boolean = <function1>

scala> unionOfBoth(-10)
res7: Boolean = true

scala> unionOfBoth(50)
res8: Boolean = true

scala> unionOfBoth(0)
res9: Boolean = false
union您问题中的函数只是将这种模式一般应用于任何两组的一种方式。

关于scala - Scala 中两个集合的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com