【问题标题】:How to get first satisfied return value for a collection?如何获得集合的第一个满意返回值?
【发布时间】:2019-11-03 16:22:05
【问题描述】:

我是 Scala 新手。我有一个 HashSet,当我迭代它时,我将递归函数应用于元素。如何获得第一个满意的函数返回值?

我尝试了collections.find(...).map(...),但无法提取find()函数内部的返回值,我不想map再次运行这些递归函数。

def Rec(myObject, acc: list):
    if myObject.size == 1:
        return acc
    elif len(myObject.myList) == 0:
        return None
    else:
        for e in myObject.myList:
            #func is another function that create a new object whose size is smaller and changes myList attribute
            newObject = func(myObject, e)
            acc.append(e)
            res = Rec(newObject, acc)
            if res:
                return res
        return None

所以,我的问题是如何将上述 python 代码转换为惯用的 scala 代码。

编辑: 例如: 我想这样写:

list.find(e=>Rec(e).isDefined).map(e=>Rec(e).get)

Rec() 是一个返回选项的函数。而且我想在find(...)中找到Rec(e)的结果,这样我就不用在map(...)中重新计算了

【问题讨论】:

标签: python scala functional-programming


【解决方案1】:

如果我理解正确,您有一些(未指定)类型的元素的 List,并且您只想处理每个元素,直到第一个非无结果。

这样的?

myObject.myList        //List of elements
        .view          //evaluate lazily
        .flatMap(rec)  //pass to the rec() func, flatten away all None results
        .headOption    //Some(<1st good result>) or None

在这种情况下,rec() 仅在返回第一个 non-None 结果之前调用,或者如果没有产生 non-None 结果,则直到列表末尾。

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多