Par*_*ppa 79 language-agnostic string uppercase
在进行不区分大小写的比较时,将字符串转换为大写或小写更有效吗?它甚至重要吗?
在这篇SO帖子中建议C#使用ToUpper更有效,因为"Microsoft以这种方式优化了它".但我也读过这个论点,转换ToLower与ToUpper取决于你的字符串包含的内容,并且通常字符串包含更多小写字符,这使得ToLower更有效.
特别是,我想知道:
Jon*_*eet 88
由于某些文化,特别是土耳其的"有趣"特征,转换为大写或小写以进行不区分大小写的比较是不正确的.而是使用具有适当选项的StringComparer.
MSDN 对字符串处理有一些很好的指导.您可能还想检查您的代码是否通过了土耳其测试.
编辑:注意Neil关于序数不区分大小写的比较的评论.整个领域非常模糊:(
Ian*_*oyd 22
来自MSDN上的Microsoft:
在.NET Framework中使用字符串的最佳实践
字符串使用的建议
- 在规范化字符串以进行比较时,请使用String.ToUpperInvariant方法而不是String.ToLowerInvariant方法.
为什么?来自微软:
将字符串规范化为大写
有一小组字符在转换为小写时无法进行往返.
这样一个不能往返的角色的例子是什么?
ρ, Ρ, ρ
这就是为什么,如果您想要进行不区分大小写的比较,则将字符串转换为大写,而不是小写.
war*_*ren 12
基于倾向于具有更多小写条目的字符串,ToLower理论上应该更快(许多比较,但很少分配).
在C中,或者当使用每个字符串中可单独访问的元素(例如C字符串或C++中的STL字符串类型)时,它实际上是一个字节比较 - 所以比较UPPER没有什么不同lower.
如果您偷偷摸摸并将字符串加载到long数组中,您将对整个字符串进行非常快速的比较,因为它可以一次比较4个字节.但是,加载时间可能会让它变得不值得.
为什么你需要知道哪个更快?除非你正在进行公制的比较,否则运行几个周期的速度与整体执行的速度无关,听起来像是过早的优化:)
微软已经优化ToUpperInvariant(),而不是ToUpper().不同之处在于,不变性更具文化友好性.如果您需要对文化中可能不同的字符串进行不区分大小写的比较,请使用Invariant,否则不变的转换性能应该无关紧要.
我不能说ToUpper()或ToLower()是否更快.我从来没有尝试过,因为我从未遇到过性能问题那么重要的情况.
| 归档时间: |
|
| 查看次数: |
35036 次 |
| 最近记录: |