gpt4 book ai didi

swift - 在 Swift 中将 String 转换为 [Character] 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-28 09:38:59 25 4
gpt4 key购买 nike

我想对字符串运行过滤器。我的第一次尝试失败了,因为字符串没有自动转换为 Character[]。

var s: String = "abc"
s.filter { $0 != "b" }

如果我使用以下代码笨拙地将 String 转换为 Character[],它会按预期工作。但肯定有更简洁的方法吗?

var cs:Character[] = []
for c in s {
cs = cs + [c]
}

cs = cs.filter { $0 != "b" }

println(cs)

最佳答案

String符合 CollectionType协议(protocol),因此您可以将其直接传递给 map 的函数形式和 filter根本不转换它:

let cs = filter(s) { $0 != "f" }

cs这是一个ArrayCharacter秒。你可以把它变成 String通过使用 String(seq:)构造器,构造一个 String来自任何 SequenceTypeCharacter秒。 (SequenceType 是所有列表都遵循的协议(protocol);for 循环使用它们,还有许多其他事情。)

let filteredString = String(seq: cs)

当然,您可以轻松地将这两件事放在一个语句中:

let filteredString = String(seq: filter(s) { $0 != "f" })

或者,如果你想方便的话filter类似于 Array 上的方法,您可以使用扩展名:

extension String {
func filter(includeElement: Character -> Bool) -> String {
return String(seq: Swift.filter(self, includeElement))
}
}

(您将其写为“Swift.filter”,这样编译器就不会认为您正在尝试递归调用当前正在编写的 filter 方法。)

只要我们隐藏过滤的执行方式,我们还不如使用惰性 filter ,这应该完全避免构造临时数组:

extension String {
func filter(includeElement: Character -> Bool) -> String {
return String(seq: lazy(self).filter(includeElement))
}
}

关于swift - 在 Swift 中将 String 转换为 [Character] 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24111976/

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