Ответ Джоэля Мюллера должен помочь вам в деле base-64.
В ответ на предварительный код, который вы указали в свой собственный ответ , вы можетеопределенно повысить его эффективность, изменив код, чтобы выполнить то, что делает ваш цикл for
(фактически O (N) IndexOf
), чтобы использовать поиск хеша (что должно сделать его O (1)).
Я основываю это на предположении, что baseChars
- это поле, которое вы инициализируете в конструкторе вашего класса.Если это правильно, выполните следующую настройку:
private Dictionary<char, int> baseChars;
// I don't know what your class is called.
public MultipleBaseNumberFormatter(IEnumerable<char> baseCharacters)
{
// check for baseCharacters != null and Count > 0
baseChars = baseCharacters
.Select((c, i) => new { Value = c, Index = i })
.ToDictionary(x => x.Value, x => x.Index);
}
Затем в вашем методе StringToInt
:
char next = encodedString[currentChar];
// No enumerating -- we've gone from O(N) to O(1)!
if (!characterIndices.TryGetValue(next, out nextCharIndex))
{
throw new ArgumentException("Input includes illegal characters.");
}