我不确定哪一个更好。我需要解析输入字符串的每个字符并获取字符的替换字符串。对于某些对象,允许使用所有字母数字字符,因此使用switch / case会导致大量代码并降低可读性和可维护性,但我可以使用静态方法。使用HashTable还需要大量代码
使用静态方法:
private static string EncodeChar(char c)
{
var symbols = string.Empty;
switch (c)
{
case '0':
symbols = "Test";
break;
case '1':
symbols = "Hello";
break;
[...]
}
symbols;
}
使用HashTable:
private static Hashtable table = CreateTable();
private static Hashtable CreateTable()
{
var table = new HashTable();
table.Add('0',"Test");
table.Add('1', "Hello");
[...]
return table;
}
private static string EncodeChar(char c)
{
return table.ContainsKey(c) ? table[c].ToString() : string.Empty;
}
编码方法:
public void Encode()
{
string output = string.Empty;
for (int i = 1; i < Data.Length; i++)
{
output = string.Concat(output, EncodeChar(Data[i]));
}
EncodedData = output;
}
有关性能和内存分配的优点/缺点是什么?
答案 0 :(得分:1)
我使用HashTable
,因为代码更具可读性和可维护性:您可能有一天决定从XML文件加载子代码字符串,这样您就不会更改代码来更改映射。
答案 1 :(得分:1)
哈希更快,因为您可以直接访问'编码字符串'
例如,如果你假设所有字符都是'9',那么每次处理一个字符时,它必须在执行右if conditions
之前评估8 statement
。
使用switch()
答案 2 :(得分:0)
切换代码与替代方案完全相同,但它更具可读性,应该是主要关注点。
然而,我会使用抽象工厂来获取不同类型输入的许多不同编码实现之一。