遍历过滤器列表以应用它们

时间:2019-07-27 09:17:38

标签: kotlin filter

我在列表(10..1000)上有一些过滤器。 我想要一个函数对象列表,遍历此列表并将该过滤器应用于(10..1000)。 也许以后再选择一些过滤器。

fun main(args: Array<String>) {
    var sol = (10..1000).toList().filter(lastDigitIsLength ).filter(no7andNo1 ).filter(isEvenAndGreater1).filter(first2DigitsOddCrossSumLess10 ).filter(isPrime )
println("The number is $sol")

}
/* The functions exist

2 个答案:

答案 0 :(得分:1)

很少有这样做的方法。
我在示例中列出了它们以及一些一般性的评论。

import ipywidgets as widgets

data = {"label_1":"data_1", "label_2":"data_2", "label_3":"data_3"}

names = []
checkbox_objects = []
for key in data:
    checkbox_objects.append(widgets.Checkbox(value=False, description=key))
    names.append(key)

arg_dict = {names[i]: checkbox for i, checkbox in enumerate(checkbox_objects)}

ui = widgets.VBox(children=checkbox_objects)

selected_data = []
def select_data(**kwargs):
    selected_data.clear()

    for key in kwargs:
        if kwargs[key] is True:
            selected_data.append(key)

    print(selected_data)

out = widgets.interactive_output(select_data, arg_dict)
display(ui, out)

答案 1 :(得分:1)

对不起,也许我误解了你的问题。您是否要将过滤器列表应用于整数列表?如果是这样,可以这样做:

fun filter(list: List<Int>, filters: List<(Int) -> Boolean>): List<Int> {
    var result = list
    for (filter in filters) {
        result = result.filter(filter)
    }

    return result
}

因此您可以将函数重写为:

fun main() {
    val sol = filter((10..1000).toList(), listOf(::lastDigitIsLength, ::no7andNo1, ::isEvenAndGreater1))
    println("The number is $sol")
}