ESC gg=G
, чтобы повторно расположить код с отступом и :retab
для преобразования вкладок в пробелы или пробелы к вкладкам был тем, что сцепило меня с энергией. Таким образом, на самом деле Вы не должны быть вынуждены использовать его, просто необходимо изучить, когда это может помочь Вам увеличить свою скорость.
Проходят vimtutor
.
Начинают использовать энергию для простого редактирования, как файлы конфигурации или HTML. Изучите команды, поскольку Вам нужны они.
Поиск Google для хорошего .vimrc, используемого кем-то, кто использует набор инструментальных средств, который напоминает Ваш. Включите подсветку синтаксиса. Найдите хорошую цветовую схему.
Изучают макросы, потому что Vim является лучшим для автоматизированных задач и вставки отрывка, как форматирование нескольких слов в сложный XML-тэг или преобразование CSV к HTML-таблице.
Этот способ выглядит немного быстрее, чем метод в исходном вопросе:
private static byte[] _temp = new byte[0];
public static void Swap(byte[] data)
{
if (data.Length > _temp.Length)
{
_temp = new byte[data.Length];
}
Buffer.BlockCopy(data, 1, _temp, 0, data.Length - 1);
for (int i = 0; i < data.Length; i += 2)
{
_temp[i + 1] = data[i];
}
Buffer.BlockCopy(_temp, 0, data, 0, data.Length);
}
При тестировании предполагалось, что метод вызывается повторно, поэтому изменение размера _temp
массив не имеет значения. Этот метод основан на том факте, что половина перестановки байтов может быть выполнена с помощью первоначального вызова Buffer.BlockCopy (...)
(со смещением исходной позиции на 1).
Пожалуйста, проверьте это сами, на случай, если я совсем сошла с ума. В моих тестах этот метод занимает примерно 70% от исходного метода (который я модифицировал, чтобы объявить байт b
вне цикла).
Что ж, вы можете использовать трюк с заменой XOR , чтобы избежать промежуточного байта. Однако это не будет быстрее, и я не удивлюсь, если IL будет точно таким же.
for (int i = 0; i < data.Length; i += 2)
{
data[i] ^= data[i + 1];
data[i + 1] ^= data[i];
data[i] ^= data[i + 1];
}