- 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;
}
Нобелевская премия по программированию
P.S. Ой бля, это же c#... Но ведь там тоже есть подобный хелпер? Только не говорите, что его нет...
можно a.Equals(b); если хочется по ссылке
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
То, что для этого должна быть стандартная функция. Это ж не сишка, чтобы массивы руками сравнивать.
Ну если ты её запустишь на массиве из указателей... то да. А так - она блобы сравнивает.
Смотрите-ка, действительно указатели сравнивает. Содержимое у строк одинаковое, а указатели разные. memcmp это и показывает!
min(strlen(a), strlen(b)) тогда уж
Вроде пофиксил UB. Всё честно, присваиваем массивам одно и то же, а сравниваются указатели.
b[3] = __LINE__;
Ну толсто же.
А вообще, можно ли? На ум идут только псевдослучайные числа, сгенерированные таким образом, что выйдет последовательность вида "42\0042\01" - функция достаточно запутанная (только не знаю, какая), но внешне кажущаяся периодической с периодом sizeof(char*)... Или какая-то математическая питушня вида https://х..р/post/146140/ - a заполняем константами, а b - значением выражений...