gpt4 book ai didi

swift - 如何在 Swift 中编写适用于所有类型的映射?

转载 作者:搜寻专家 更新时间:2023-11-01 07:30:20 25 4
gpt4 key购买 nike

作为练习,我正在实现一个 map 函数,它接受一个数组和一个函数,并将该函数应用于数组的所有元素,但我不知道如何声明它以使其适用于任何类型的大批。我可以做类似的事情

func intMap(var arr: [Int], fun: (Int) -> Int) -> [Int] {
for i in 0 ..< arr.count {
arr[i] = fun(arr[i])
}
return arr
}

intMap([1,2,3], {x in return x * x})

但这只适用于 int。

Swift 内置映射的类型签名是什么?

编辑:

所以我错过了一个事实,即我可以在不显式声明参数类型的情况下声明参数类型签名。

func myMap<T>(var arr: [T], fun: (T) -> T) -> [T] {
for i in 0 ..< arr.count {
arr[i] = fun(arr[i])
}
return arr
}

myMap([1,2,3], fun: {
x in return x * x
})

最佳答案

  • 创建一个新的 Playground
  • 就在它有import UIKit的地方输入import Swift
  • 命令点击单词 Swift

这将打开 Swift 库,您可以在那里看到所有类型定义。

你可以看到:

extension CollectionType {
/// Return an `Array` containing the results of mapping `transform`
/// over `self`.
///
/// - Complexity: O(N).
@warn_unused_result
@rethrows public func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]

编辑添加

或者,您可以编写一个更通用的 map

func myMap<T, U>(var arr: [T], fun: T -> U) -> [U] {
var a: [U] = []
for i in 0 ..< arr.count {
a.append(fun(arr[i]))
}

return a
}

它返回一个可能不同类型的新数组,您可以将其放在您的 playground 中亲自查看。

let a = [1, 2, 3]
let b = myMap(a, fun: { x in Double(x) * 2.1 })
a
b

关于swift - 如何在 Swift 中编写适用于所有类型的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865361/

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