- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
public static byte[] Trim(this byte[] origin_array)
{
int findex = -1, eindex = -1;
bool inseq = false;
if (origin_array[0] != 0x00)
{
if (origin_array[origin_array.Length - 1] != 0x00)
return origin_array;
findex = 0;
}
for (int i = 0; i < origin_array.Length; i++)
{
if (origin_array[i] == 0x00)
{
if (inseq)
continue;
else
inseq = true;
}
else
{
if (inseq)
if (findex == -1)
findex = i;
eindex = i;
}
}
if (findex == eindex)
return new byte[0];
byte[] result_array = new byte[eindex - findex + 1];
Array.Copy(origin_array, findex, result_array, 0, result_array.Length);
return result_array;
}
cyperh 04.10.2014 09:42 # 0
dzzpchelka 04.10.2014 09:47 # 0
cyperh 04.10.2014 09:50 # 0
wvxvw 04.10.2014 10:15 # +2
эквивалентно:
или
или
Свойство такого кода называется idempotency (не знаю, как по-русски, но смысл в том, что это преобразование, которое можно сделать только один раз, все последующие попытки выполнить те же действия над результатом ничего не изменят).
Ну и лишние переменные. Если функция должна была себя вести как аналог для строк, то имело бы смысл организовать два счетчика: один считает от начала, другой - от конца, и считать пока они не встретятся.
А вообще на Стековерфлоу есть секция код-ревью.
kegdan 04.10.2014 10:27 # +1
dzzpchelka 04.10.2014 10:33 # 0
kegdan 04.10.2014 11:02 # 0
dzzpchelka 04.10.2014 11:13 # 0
kegdan 04.10.2014 11:56 # +1
ps - чет я седня притормаживаю
http://ideone.com/b2xuHN
wvxvw 04.10.2014 13:46 # +1
bormand 04.10.2014 15:14 # +1
wvxvw 04.10.2014 15:32 # +2
kegdan 04.10.2014 11:14 # 0
dzzpchelka 04.10.2014 11:34 # 0
Array.Copy(bArray, --f, resultArray, 0, resultArray.Length);
Скорее всего так, иначе первое значение обрезается.
kegdan 04.10.2014 11:58 # 0
Qwertiy 04.10.2014 11:28 # 0
UPDATE: f>=e, а то можно пустой массив передать...
И почему &, а не &&?
kegdan 04.10.2014 11:59 # 0
dzzpchelka 04.10.2014 10:42 # 0
Qwertiy 04.10.2014 10:43 # 0
Да и вообще, код можно написать гораздо проще: один цикл по нулям от начала массива, одни так же, но с конца, подвинуть кусок массива к началу и вызвать Array.Resize для отрезания мусора в хвосте. Последние два шага - только если нули были.
dzzpchelka 04.10.2014 10:46 # 0
Qwertiy 04.10.2014 10:48 # 0
Антонимы first - last, start - end, left - right. Так что findex - eindex - это странно.
Отдельная проверка на пустой массив кажется странной, скорее всего, она покрывает какой-то баг.
dzzpchelka 04.10.2014 09:53 # 0
cyperh 04.10.2014 10:00 # 0
dzzpchelka 04.10.2014 10:33 # 0
cyperh 04.10.2014 10:37 # 0
dzzpchelka 04.10.2014 10:39 # 0
cyperh 04.10.2014 10:46 # 0
cyperh 04.10.2014 10:50 # 0
dzzpchelka 04.10.2014 10:52 # 0
cyperh 04.10.2014 11:08 # +1
kegdan 04.10.2014 09:58 # 0
kegdan 04.10.2014 09:58 # 0