C语言中没有字符串这个概念吧? 所以,我想知道:在现代语言中使用字符数组而不是字符串是否会节省内存,例如 C#。
最佳答案
在 Python 中,如果我没理解错的话,答案是“视情况而定”。 (我使用 python 是为了方便,你说的是“任何现代语言”)
我创建了一个创建字母表字符数组的函数,另一个创建字母表字符串的函数。然后分别运行它们 100 万次。
与字符串数组的 0.5 秒相比,字符数组耗时约 1.7 秒。
“也许这是头顶上的事情?”你可能会问。
很好:我对它们进行了全局初始化,然后通过一个循环(100 万次)对每个进行迭代,将一些变量设置为当前字母。
字符数组为 7.7 秒,字符串为 9 秒。
“如果您正在寻找特定元素怎么办?”
我遍历每个变量以查看“z”是否在元素中。 char 数组用了 1.8 秒,而字符串用了 0.4 秒。
“这很有趣,也许这只是一项任务?”
我的最后一个测试是在不分配任何东西的情况下进行迭代。
同样,char 数组更快,为 3.9 秒,而字符串迭代为 5.3 秒。
所以似乎字符串对于初始创建和搜索更快(我也假设排序,但我不打算编写排序函数来找出答案),而字符数组对于迭代事件(对于数组中的每个/字符串)。
希望这对您有所帮助。
PS - 我的第一个测试类的代码:
#!/usr/bin/env python
import dis
import time
def char_func():
my_c_var = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
#print my_c_var
def stri_func():
my_s_var = "abcdefghijklmnopqrstuvwxyz"
#print my_s_var
start_time = time.time()
for i in range(1000000):
char_func()
print("--- %s seconds ---" % (time.time() - start_time))
start_time = time.time()
for i in range(1000000):
stri_func()
print("--- %s seconds ---" % (time.time() - start_time))
关于c# - 在 C# 中使用字符数组 (char[]) 而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825466/