根据Swift 5文档,String有方法randomElement()
,复杂度为O(1)
或O(*n*)
,具体取决于是否符合RandomAccessCollection
协议。
因此,我想知道**如何使字符串复杂度的randomElement()为O(1)的情况。
我的字符串是:
let letters = "abcdefghijklmnopqrstuvwxyz"
问题:
1.我如何检查我的特定字符串是否符合RandomAnswer Collection?
1.如何从字符串中创建/删除与Random Collection协议的一致性?
3条答案
按热度按时间mw3dktmi1#
字符串永远不是随机访问集合。如果这是你想要的,投一个数组。
slmsl1lt2#
randomElement
是Collection
协议的要求,如您所见here。所以
String
仅仅是通过实现这个方法来遵循Collection
,文档注解只是从Collection
中的原始注解复制粘贴而来。如果您在
Collection
而不是String
的上下文中阅读文档注解,则会更有意义。这是说如果self
也是RandomAccessCollection
,那么它的时间复杂度是O(1),否则它的时间复杂度是O(n)。String
* 不符合RandomAccessCollection
,所以String.randomElement
是O(n)。编辑:
要检查某个东西是否是
Character
的RandomAccessCollection
,不能直接使用is
,因为RandomAccessCollection
有关联的类型。一种方法是定义一个接受约束类型参数的函数:dohp0rv53#
Swift中的
Array
已经符合RandomAccessCollection