Functional programming 函数式编程:将关联数组的元素与另一个关联数组中的元素进行比较,其中每个元素必须进行不同的比较

Functional programming 函数式编程:将关联数组的元素与另一个关联数组中的元素进行比较,其中每个元素必须进行不同的比较,functional-programming,comparison,Functional Programming,Comparison,场景: 您正在将视频上载到多个端点,每个端点都有不同的限制。我们在关联数组中有如下限制: EndPointRestrictions = [ point1 = [ resolution: 4000, extensions: [mp4, mov] ], point2 = [ resolution: 1080, extensions: [mp4, mov] ]

场景:

您正在将视频上载到多个端点,每个端点都有不同的限制。我们在关联数组中有如下限制:

EndPointRestrictions = [  
     point1 = [  
          resolution: 4000,  
          extensions: [mp4, mov]  
     ],
     point2 = [
          resolution: 1080,  
          extensions: [mp4, mov]  
     ],      
]
我们从ffmpeg之类的东西中获取视频的详细信息。我们将以大致相同的方式格式化它

details = [
    resolution: 1080,
    extensions: [mp4, mov]
]
我们需要知道视频是否与端点兼容,并且每个比较值都需要以不同的方式进行比较(分辨率是否大于端点可接受,扩展是否在可接受扩展列表中)

我们有一个函数列表来表示这些差异

comparisons = [
    resolution: function(a, b) {
        return (a <= b) ? true : false
    },
    extension: function(a, b) {
        return (a in b) ? true : false
    }
}

我怎么能用功能范式来写呢?我将使用什么样的数据结构,如何表示算法

该算法看起来与您已有的算法没有太大区别——您可以通过查找每个端点来过滤端点,以确定是否满足所有条件。您将使用什么样的数据结构在很大程度上取决于您将要使用的实际编程语言,像您正在使用的异构关联数组是非常少见的。@Bergi感谢您的回答Bergi。我曾期望算法能被分解成几个函数。让我来告诉你,如果你能根据你想使用的数据结构选择语言,它会是什么语言和数据结构,为什么,我不知道有哪种静态类型的语言具有这样一种异构的数据结构:-/该算法看起来与您已有的算法没有太大区别-您可以通过查找每个端点来过滤端点,无论是否满足所有条件。您将使用什么样的数据结构在很大程度上取决于您将要使用的实际编程语言,像您正在使用的异构关联数组是非常少见的。@Bergi感谢您的回答Bergi。我曾期望算法能被分解成几个函数。让我来告诉你,如果你能根据你想使用的数据结构选择语言,它会是什么语言和数据结构,为什么?TBH,我不知道有哪种静态类型的语言有这样的异构数据结构:-/
extractIncompatibilities(details, EndPointRestrictions , comparisons ) {
    incompatibilities = []
    foreach(EndPointRestrictions  as name => conditions) {
        result = [version: name, conditions = []]
        foreach(details as detail => value) {
            if (comparisons [detail](value, conditions[detail])) {
                result[conditions][detail] = conditions[detail]
            }
        }
        if (length(result[conditions])) {
            incompatibilities[] = result
        }
    }
    return incompatibilities
}