我希望创建一个通用的find()函数,这通常在函数式编程中使用。在函数式编程中,您不使用数组索引和for循环,而是使用过滤器。它的工作原理是如果您有一个列表,比如说:
如果你想要查找香蕉,那么你可以通过创建元组将数组索引分配给列表元素。
现在你可以筛选到“banana”并返回索引值。
我试图创建一个通用的函数,但是我遇到了一个错误。这个语法有什么问题?
["apple", "banana", "cherry"]
如果你想要查找香蕉,那么你可以通过创建元组将数组索引分配给列表元素。
[(1, "apple"), (2, "banana"), (3, "cherry")]
现在你可以筛选到“banana”并返回索引值。
我试图创建一个通用的函数,但是我遇到了一个错误。这个语法有什么问题?
func findInGenericIndexedList<T>(indexedList: [(index: Int, value: T)], element: (index: Int, value: T)) -> Int? {
let found = indexedList.filter { // ERROR: Cannot invoke 'filter' with an argument list of type '((_) -> _)'
element.value === $0.value
}
if let definiteFound = found.first {
return definiteFound.index
}
return nil
}
更新1: 我想使用上面的解决方案,而不是使用find()(将被弃用)或在Swift 2.0中使用indexOf(),因为我正在尝试遵循函数式编程范例,依赖于通用函数而非类方法。
element === $0.value
中,您将类型为(Int, T)
的元组与类型为T
的值进行比较。===
,即“恒等于”运算符,仅适用于类的实例。find
函数?(在 Swift 2 中它被称为indexOf
。)