看起来好像在char -> string -> string
类型的标准库中没有功能,它在string
的前面(或末尾)插入了char
。有一些解决方法,例如通过使用String.make
或String.blit
。有没有一个优雅的方式来做到这一点?如何在OCaml中将字符追加到字符串中?
回答
String.make
和String.blit
是这样做的好方法,但它们似乎是必要的。我个人更喜欢让使用Char.escaped
和字符串拼接缀功能:
let (^$) c s = s^Char.escaped c (* append *)
let ($^) c s = Char.escaped c^s (* prepend *)
从@pad的代码是什么,我会用,因为我喜欢把字符串作为不可改变如果可能的话。但我不会使用Char.escaped
;它专门用于你想要OCaml字符的词汇表示。因此,这里是你做出的改变,你会得到什么:
let prefix_char s c = String.make 1 c^s
let suffix_char s c = s^String.make 1 c
我做了不同的方法效率的比较:
我写了一个简单的测试:
let append_escaped s c = s^Char.escaped c let append_make s c = s^String.make 1 c let append_sprintf s c = Printf.sprintf "%s%c" s c let _ = let s = "some text" in let c = 'a' in for i = 1 to 100000000 do let _ = append_(*escaped|make|sprintf*) s c in() done
我原生编译(Intel Core 2 Duo)。
我对每个选项进行了三次测试,用
time
进行计时,并计算平均值真实已过时间。
下面是结果:
s^String.make 1 c
:7.75s(100%)s^Char.escaped c
:8.30s(107%)Printf.sprintf "%s%c" s c
:68.57s(885%)
再次注意:'Char.escaped'与'String.make'不同。根据OCaml的词汇规则,它为角色创造了一个“逃脱”的价值。为了看到这个,尝试用这种方法添加一个换行符(''\ n'')。这也是为什么它慢一点。对于大多数通用目的,你想使用'String.make 1 c'。自然'Printf.sprintf'慢得多,但非常灵活。 –
@JeffreyScofield我只是想补充一点,所以人们不需要自己尝试:'char.escaped'\ n''='“\\ n”'。 –
谢谢,也许我应该自己说这个吧!这些评论限制在很短的时间内。无论如何:'炭。'\ n''给你一个由''''和''''组成的双字符串。 'String.make 1'\ n''给你一个由''\ n''组成的单字符串,这更可能是你想要的。 –
- 1. 将字符串追加到文件中
- 2. 如何在android中追加字符串?
- 3. 如何在iPhone中追加字符串?
- 4. 如何追加\字符串?
- 5. 如何追加字符串
- 6. 如何将点字符添加到字符串中的字符?
- 7. 如何将字符串追加到列表中的辅音中?
- 8. C++追加到字符串
- 9. 追加到字符串?
- 10. 字符串丢失时将字符串追加到文件名
- 11. 将字符串追加到NSXmlParser字符串?
- 12. 将相同的字符串追加到Python中的字符串列表中
- 13. 将相同的字符串追加到Groovy中的字符串列表中
- 14. 在python追加字符字符串
- 15. 追加到getJSON中的字符串
- 16. 如何将字符串添加到字符串数组中C
- 17. 如何将参数追加到Objective C中的字符串?
- 18. 如何将查询字符串追加到Angular UI中的URL
- 19. 如何将变量追加到ActionLink中的字符串?
- 20. 如何将变量追加到xcode中的字符串
- 21. 如何将字符串追加到R中的向量?
- 22. 如何重复将文本追加到C中的字符串?
- 23. Objective-C:你如何将一个字符串追加到NSMutableString中?
- 24. 将字符串追加到UILabel文本?
- 25. 将字符串追加到tinyMCE实例
- 26. 追加字符串字符串
- 27. 追加字符串
- 28. 追加字符串
- 29. 如何比较OCaml中的字符串?
- 30. 在另一个字符串中追加字符串
使用'缓冲区'可能更适合种植字符串。 –