1
26
假设每个输入都是有效的
|
2
21
我将滚动自己的fast hash函数并使用integer switch语句来避免字符串比较:
我的测试表明 快4.5倍 而不是原始代码。 如果C有一个预处理器,我将使用宏来形成case常量。 这种技术比使用哈希表更快,当然也比使用字符串比较更快。它最多可用于4个32位整数的字符串,最多可用于8个64位长字符的字符串。 |
3
8
如果您知道各种代码出现的频率,那么更常见的代码应该放在列表的顶部,这样做的比较就更少了。但我们假设你没有。 假设activcode总是有效的,当然会加快速度。您不需要测试空字符串或空字符串,并且可以在开关的末尾留下一个测试。也就是说,测试除y之外的所有内容,如果没有找到匹配项,则返回DirecteEdge。 不要打开整个字符串,而是打开它的第一个字母。对于字母较多的代码,在开关盒内进行第二次测试。像这样:
如果您可以返回并更改代码,使它们都是单个字符,那就更好了,因为这样您就不需要进行多个测试。更好的方法是使用枚举的数值,因此您可以简单地强制转换,而不必首先切换/转换。 |
4
6
我将使用一个字典作为键值对,并利用O(1)查找时间。 |
5
5
您有关于哪些字符串更常见的统计数据吗?所以可以先检查一下吗? |
6
5
如果输入有效,则可以使用
|
7
4
将开关更改为打开字符串的hashcode()。 |
8
4
我推断tster对“切换自定义哈希函数”的答复,假设代码生成器创建了一个查找表,或者——失败了——自己构建了一个查找表。 自定义哈希函数应该很简单,例如:
在以下假设下,这需要一个51个元素的表,很容易保存在一级缓存中:
如果可以使用不安全的访问
|
9
4
请原谅,如果我在这里出错了,我从我的C++知识中推断出来。例如,如果你使用一个空字符串的ActudioC[0 ],在C++中得到一个值为零的字符。 创建一个二维数组,初始化一次;第一个维度是代码的长度,第二个维度是字符值。用要返回的枚举值填充。现在您的整个功能变成:
幸运的是,与其他两个字符代码相比,所有两个字符代码在第一个字母中都是唯一的。 |
10
3
我会把它放在字典里,而不是使用switch语句。尽管如此,这可能不会有什么不同。或者可能。见 C# switch statement limitations - why? . |
11
3
代码:
|
12
3
通过预先填充索引表来利用简单的指针算法来交换内存以提高速度。
使枚举字节基于以节省一些空间。
|
13
2
如果枚举值是任意的,则可以执行此操作…
…如果你想彻底疯掉,你也可以用不安全的指针调用,如 Pavel Minaev … 上面的纯强制转换版本比这个不安全的版本快。
|
14
1
+1.使用字典。不一定要优化,但会更干净。 我可能也会对字符串使用常量,尽管我怀疑这会为您带来性能方面的任何好处。 |
15
1
混乱,但使用嵌套的ifs和硬编码的组合可能会击败乐观主义者:
它通过三个或四个比较得到正确的函数。我甚至不会考虑真的这样做,除非你的代码被期望每秒运行几次! 您进一步考虑它,以便只进行单个字符的比较。 例如,将“<“bt”'替换为“>=b”'——速度更快,可读性更低! |
16
1
您的所有字符串的长度最多为2个字符和ASCII,因此我们可以使用每个字符1个字节。
更可能的是,他们也永远不会
现在我们有了一个相对较短(64K)范围内的单个整数,我们可以使用查找表:
现在,获取给定字符串的值是:
|
17
0
将案例放在具有非线性访问的排序结构中(如哈希表)。 你的开关将有一个线性时间。 |
18
0
您可以根据使用最多的代码来订购代码,从而稍微加快速度。 但是我同意克莱特斯的观点:我能想到的最好的加速方法是使用一个有足够空间的散列图(这样就不会发生碰撞)。 |
19
0
一些随机的想法,可能不完全适用于一起: 打开字符串中的第一个字符,而不是字符串本身,并为可以包含多个字母的字符串执行子开关? 哈希表当然可以保证O(1)检索,但对于较小的比较数量来说,它可能不会更快。 不要使用字符串,而是使用枚举或类似flyweight的内容。无论如何,在这种情况下使用字符串似乎有点脆弱… 如果你真的需要它尽可能快,为什么不把它写在汇编中呢?:) |
20
0
我们可以将activcode强制转换为int,然后在case语句中使用int吗? |
21
0
使用代码的长度从该代码创建唯一值,而不是使用GetHashCode()。如果使用代码的第一个字母被代码的长度移动,就不会发生冲突。这将成本降低到两个比较,一个数组索引和一个移位(平均)。
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |