- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
bool compareArrays(int[] a,int[] b)
{
if(a.Length != b.Length)
return false;
for(int i = 0;i<a.Length;i++)
if(a[i] != b[i])
return false;
return true;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
bool compareArrays(int[] a,int[] b)
{
if(a.Length != b.Length)
return false;
for(int i = 0;i<a.Length;i++)
if(a[i] != b[i])
return false;
return true;
}
Нобелевская премия по программированию
someone 03.03.2016 09:57 # +3
bormand 03.03.2016 19:24 # +1
P.S. Ой бля, это же c#... Но ведь там тоже есть подобный хелпер? Только не говорите, что его нет...
gost 03.03.2016 19:37 # 0
bormand 03.03.2016 19:46 # 0
kegdan 03.03.2016 19:49 # 0
можно a.Equals(b); если хочется по ссылке
nihau 04.03.2016 13:17 # 0
Performance. Methods found in System.Linq usually have worse performance on arrays than custom imperative algorithms. I tested the performance of SequenceEqual because I had nothing better to do. I compared two equal arrays of 32767 elements.
Result:
SequenceEqual was more than ten times slower than the imperative algorithm (ArraysEqual).
Однажды вступил в linq ienumerable.orderby на ~100k элементов массив, вместо Array.Sort
gost 04.03.2016 17:40 # 0
nihau 03.03.2016 11:08 # +1
kegdan 03.03.2016 14:38 # +2
Steve_Brown 03.03.2016 14:41 # 0
kegdan 03.03.2016 14:49 # 0
Her 03.03.2016 23:34 # 0
bormand 04.03.2016 06:49 # 0
kegdan 04.03.2016 07:04 # 0
gost 04.03.2016 17:41 # +4
guest 05.03.2016 21:45 # 0
bormand 05.03.2016 21:46 # 0
То, что для этого должна быть стандартная функция. Это ж не сишка, чтобы массивы руками сравнивать.
3_dar 06.03.2016 21:22 # +1
fajes_rown 06.03.2016 21:45 # 0
bormand 06.03.2016 21:50 # 0
Ну если ты её запустишь на массиве из указателей... то да. А так - она блобы сравнивает.
kegdan 06.03.2016 22:02 # 0
1024-- 06.03.2016 22:05 # 0
Смотрите-ка, действительно указатели сравнивает. Содержимое у строк одинаковое, а указатели разные. memcmp это и показывает!
bormand 06.03.2016 22:57 # 0
3_dar 06.03.2016 23:26 # 0
bormand 07.03.2016 00:16 # 0
min(strlen(a), strlen(b)) тогда уж
1024-- 06.03.2016 23:47 # +1
Вроде пофиксил UB. Всё честно, присваиваем массивам одно и то же, а сравниваются указатели.
bormand 07.03.2016 00:17 # +1
b[3] = __LINE__;
Ну толсто же.
1024-- 07.03.2016 21:02 # 0
А вообще, можно ли? На ум идут только псевдослучайные числа, сгенерированные таким образом, что выйдет последовательность вида "42\0042\01" - функция достаточно запутанная (только не знаю, какая), но внешне кажущаяся периодической с периодом sizeof(char*)... Или какая-то математическая питушня вида https://х..р/post/146140/ - a заполняем константами, а b - значением выражений...