【发布时间】:2020-06-23 02:34:18
【问题描述】:
有一个将字符串作为输入的递归函数。它将这个字符串分成几部分,并为每一部分调用自己。此函数不会更改输入字符串,只会读取它。该功能在 Kotlin 中实现。 要创建子字符串,调用子字符串函数:
myFunc(str.substring(begin, length))
对此实施的有效性存在疑问。每次调用都会创建一个新字符串,尽管传递原始字符串中子字符串的开头和长度就足够了。 Kotlin 有子字符串类吗?例如,在 C++ 标准库中有一个类std :: string_view,而在Qt 中有一个类QStringRef。 Kotlin 中是否有类似的东西?
或者可能String类已经优化,子字符串函数没有分配新内存,而新实例使用与原来相同的内存缓冲区?
【问题讨论】:
-
您可能正在寻找一种更像绳索而不是字符串的数据结构。绳索是由多个字符串或字符串视图构成的 CharSequence。插入和删除被建模为视图,而不是修改。这里有一个开源实现:ahmadsoft.org/ropes