Crystal 语言:使用什么代替运行时 String::to_sym
Crystal language: what to use instead of runtime String::to_sym
我正在尝试将 ruby 程序转换为 crystal。
我一直在想念 string.to_sym
我有一个很大的 xml 文件,内存无法容纳。
所以解析这一切是不可能的。幸运的是,我不需要所有信息,只需要其中的一部分。所以我自己解析它,删除大部分行。我使用 String::to_sym
来存储数据,像这样:
:param_name1 => 1
:param_name2 => 11
:param_name1 => 2
:param_name2 => 22
:param_name1 => 3
:param_name2 => 33
我应该在 crystal 中使用什么?
内存是瓶颈。我不想多次存储 param_name1
。
如果您有已知的参数列表,您可以使用枚举:
enum Parameter
Name1
Name2
Name3
end
a = "Name1"
b = {'N', 'a', 'm', 'e', '1'}.join
pp a.object_id == b.object_id # => false
pp Parameter.parse(a) == Parameter.parse(b) # => true
如果参数列表未知,您可以使用效率较低的 StringPool
:
require "string_pool"
pool = StringPool.new
a = "param1"
b = {'p', 'a', 'r', 'a', 'm', '1'}.join
pp a.object_id == b.object_id # => false
a = pool.get(a)
b = pool.get(b)
pp a.object_id == b.object_id # => true
我正在尝试将 ruby 程序转换为 crystal。
我一直在想念 string.to_sym
我有一个很大的 xml 文件,内存无法容纳。
所以解析这一切是不可能的。幸运的是,我不需要所有信息,只需要其中的一部分。所以我自己解析它,删除大部分行。我使用 String::to_sym
来存储数据,像这样:
:param_name1 => 1
:param_name2 => 11
:param_name1 => 2
:param_name2 => 22
:param_name1 => 3
:param_name2 => 33
我应该在 crystal 中使用什么?
内存是瓶颈。我不想多次存储 param_name1
。
如果您有已知的参数列表,您可以使用枚举:
enum Parameter
Name1
Name2
Name3
end
a = "Name1"
b = {'N', 'a', 'm', 'e', '1'}.join
pp a.object_id == b.object_id # => false
pp Parameter.parse(a) == Parameter.parse(b) # => true
如果参数列表未知,您可以使用效率较低的 StringPool
:
require "string_pool"
pool = StringPool.new
a = "param1"
b = {'p', 'a', 'r', 'a', 'm', '1'}.join
pp a.object_id == b.object_id # => false
a = pool.get(a)
b = pool.get(b)
pp a.object_id == b.object_id # => true