![]() |
1
30
先说几点。一个是,像这样的低级语言结构,或多或少地做同样的事情,几乎从来不是任何实际应用程序的瓶颈,所以(通常)关注它们是愚蠢的。第二,正如前面已经提到的,如果你真的关心它,你应该基准它。Ruby的基准测试和概要工具当然不是编程生态系统中最先进的,但是它们完成了任务。 我的直觉是散列将更快,因为(我猜,又一次)case语句必须依次检查每个条件(使查找项O(n)而不是O(1))。但是让我们检查一下! 完整的基准测试代码位于 https://gist.github.com/25 基本上,它生成一个文件,定义适当的case/hash,然后使用它们。我继续把散列查找也放在方法调用中,这样开销就不会成为一个因素,但在现实生活中,没有理由把它卡在方法中。 这是我得到的。每种情况下,我都要做10000次查找。时间是用户时间(秒)
所以,它看起来非常像case语句是O(n)(这里没有震动)。还要注意,即使在case语句中,10K查找也仅仅是一秒钟,因此除非您正在执行这些查找的度量butload,否则最好将注意力集中在其余代码上。 |
![]() |
2
7
因为这取决于许多因素(要转换多少不同的id,编译器编译
编写一个小的测试例程并将10.000.000 id转换为字符串。对两个实现都执行几次并比较结果。如果你没有显著的差异,可以选择你更喜欢的(我认为,散列解决方案更优雅一些…) |
![]() |
3
1
下面是您想要升级的原因:
|
![]() |
4
1
下面是一个示例,它显示了符号查找的大小写速度。前面的例子是基于整数的键。 |
![]() |
5
0
为什么不使用
你也可以自己做一个基准。做这样的事:
用每个选项替换“你的代码”。 |
![]() |
6
0
正如马丁所说,这取决于你想检查多少身份证。您是从数据库中选择ID和相应的字符串,还是要硬编码它。如果只有几张支票,那你就可以结案了。但是如果需要,没有修改ID/String对的选项。 另一方面,如果要从数据库中提取大量id,可以使用Dictionary之类的工具来存储名称/值对。 当字典在内存中时,查找可能很快。 但归根结底,这完全取决于您是使用不断变化的ID/string对,还是只使用少数常量。 |
![]() |
7
-1
所以,如果有很多情况(成千上万,数百万,…),哈希查找会更好。但在你的情况下,当你只有3个变种时,
|
![]() |
Stilian · 存储库设置中没有Github页面部分 2 年前 |
![]() |
Kellen · 查看$卷展栏功能列表 2 年前 |
![]() |
Akshit Thakur Ak · 我怎样才能把铁轨停下来? 2 年前 |
![]() |
johncssjs · 将数组转换为每个元素的嵌套哈希 2 年前 |
![]() |
solidsnake99 · Rails db:如何绕过验证 2 年前 |