Лучше использовать HashTable или switch case - PullRequest
0 голосов
/ 14 февраля 2012

Я не уверен, какой из них лучше. Мне нужно проанализировать каждый символ входной строки и получить заменяющую строку для символа. Для некоторых объектов разрешены все буквенно-цифровые символы, поэтому использование параметра 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;
}

Каковы преимущества / недостатки производительности и выделения памяти?

Ответы [ 3 ]

1 голос
/ 14 февраля 2012

Хеширование выполняется быстрее, поскольку вы можете напрямую получить доступ к «закодированной строке», например,

. Если вы предполагаете, что все символы равны '9', значит, перед выполнением правильной операции придется оценить 8 if conditions.statement, каждый раз, когда вы обрабатываете символ.

Это просто худший пример при использовании switch()

1 голос
/ 14 февраля 2012

Я бы использовал HashTable, потому что код более читабелен и удобен в обслуживании: однажды вы можете решить загрузить строки подстановок из файла XML, чтобы вы не изменили код для изменения отображений.

0 голосов
/ 14 февраля 2012

Код переключателя делает то же самое, что и альтернатива, но он гораздо более читабелен, что должно быть главной проблемой здесь.

Однако я бы использовал абстрактную фабрику, чтобы получить одну из ряда различных реализаций кодированиядля разных типов ввода.

...