Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Не подскажет ли кто, как сравнить два массива ? В Java я могу воспользоваться Array.Equals, в Cи есть memcmp. Есть ли что нибудь такое в C# ? (Array.Equals не помогает, судя по всему он сравнивает по ссылке) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2005, 15:16 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Судя по всему такой фичи в шарпе нету :( Чем дальше использую шарп тем больше понимаю, что си\++ и джава более функциональны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 14:54 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Aleksey_tСудя по всему такой фичи в шарпе нету :( Чем дальше использую шарп тем больше понимаю, что си\++ и джава более функциональны. Есть такая фича - голова на плечах называется. От языка не зависит. PS: Как вариант реализации сравнения массивов в c#: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:33 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Да, чегой-то не выходит сравнить :( Но если очень надо, то: На скорую руку получилось следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Долго не тестил, но вроде работает по крайней мере для простых типов (int, string и тп) ------------------------------------------------------------------------- Нет худа без добра, да и добро без худа - чудо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:40 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Вы извините, но 10 Мб данных сравнивать через for...if - это круто !!! :) Спасибо за помощь, но хотелось бы что то поэффективнее. Мне вот предлагали через MemoryStream реализовать, но оказалось не лучше чем for...if >Есть такая фича - голова на плечах называется. От языка не зависит. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 16:41 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
To: M234 >Да, чегой-то не выходит сравнить :( Сравнить то можно, хотелось бы как можно поэффективнее. Но все равно спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 16:46 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
> Вы извините, но 10 Мб данных сравнивать через for...if - это круто !!! :) > Спасибо за помощь, но хотелось бы что то поэффективнее. А для чего, если не секрет, два совершенно одинаковых массива по 10 Мб??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 17:23 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Aleksey_tВы извините, но 10 Мб данных сравнивать через for...if - это круто !!! :) И очень быстро !!! :) К томуже сравнение массивов, тем более разнородных объектов - всегда перебор. Не вижу другого пути. Ежели кто знает - поделитесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 17:26 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
> Вы извините, но 10 Мб данных сравнивать через for...if - это круто !!! :) > Спасибо за помощь, но хотелось бы что то поэффективнее. Если массивы так велики, то почему бы не использвать msde? Скорость сравнения средствами MSSQL с использованием индексов на порядок выше чем в той же джабе. -- WBR, Roman S. Golubin ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 17:32 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
M234сравнение массивов, тем более разнородных объектов - всегда перебор. Не вижу другого пути. Ежели кто знает - поделитесь. Ну, можно хэши целочисленные сравнивать - скорость возрастет в разы... только просто array тогда не подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 17:39 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
>> Скорость сравнения средствами MSSQL с использованием индексов на порядок выше чем в той же джабе. Скорость будет ниже, потому что MSSQL не учитывает порядок элементов в массиве. Здесь сложность o(n). А в MSSQL будет o(n*log(n)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 17:41 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
www.fun4me.narod.ru>> Скорость сравнения средствами MSSQL с использованием индексов на порядок выше чем в той же джабе. Скорость будет ниже, потому что MSSQL не учитывает порядок элементов в массиве. Здесь сложность o(n). А в MSSQL будет o(n*log(n)) Т.е.? Ты считаешь, что простой перебор быстрее сравнения по индексам? Например: Код: plaintext 1. 2. 3. 4. 5. 6. где FK_arr_val - форент на массив значений (я думаю, несовместимые друг с другом объекты ты сравнивать не собираешься?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:04 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Да, совсем забыл - первичный ключ тоже надо включить в индекс: select @c1 = count(*) from arr1 inner join arr0 on (arr0.FK_arr_val = arr1.FK_arr_val and arr0.PK = arr1.PK) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:06 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
>> Т.е.? Ты считаешь, что простой перебор быстрее сравнения по индексам? Я считаю, что поиск элемента массива по индексу в массиве будет, при правильной реализации, работать быстрее, чем поиск строки таблицы по индексу. Потому как в первом случае уже известно, где лежит элемент. Плюс, когда мы делаем select @c1 = count(*) from arr1 inner join arr0 on (arr0.FK_arr_val = arr1.FK_arr_val) Мы должны перебрать все элементы массива arr1 хотя бы один раз. Разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:11 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
www.fun4me.narod.ruПлюс, когда мы делаем select @c1 = count(*) from arr1 inner join arr0 on (arr0.FK_arr_val = arr1.FK_arr_val) Мы должны перебрать все элементы массива arr1 хотя бы один раз. Разве нет? нет. мы должны перебирать индексы. целочисленные. ~ 4 байта на одну запись. А данные по этому индексу могут быть хоть километрового размера - нам безразлично, что они из себя представляют :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:18 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
M234 И очень быстро !!! :) К томуже сравнение массивов, тем более разнородных объектов - всегда перебор. Не вижу другого пути. Ежели кто знает - поделитесь. Даа, я одну деталь упустил (т.к. надеялся что в шарпе есть что то типа джававского Array.Equals). Данные однородные: массив байтов. И судя по всему другого варианта нет как простой перебор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:19 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Roman S. Golubin нет. мы должны перебирать индексы. целочисленные. ~ 4 байта на одну запись. А данные по этому индексу могут быть хоть километрового размера - нам безразлично, что они из себя представляют :-) Хааа, перебирать то мы должны индексы, но ~ 4 байта это ~ ссылка на данные в карте записей, а размер ключа индекса равен размеру полей по которым индекс построен :) Если не верите, почитайте в MSDN, кстати обычные индексы в MS SQL созданы на основе улучшенного B-дерева. Так что в любом случае мы должны перебрать все элементы массива arr1 хотя бы один раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:26 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Aleksey_tХааа, перебирать то мы должны индексы, но ~ 4 байта это ~ ссылка на данные в карте записей, а размер ключа индекса равен размеру полей по которым индекс построен :) Если не верите, почитайте в MSDN, кстати обычные индексы в MS SQL созданы на основе улучшенного B-дерева. Так что в любом случае мы должны перебрать все элементы массива arr1 хотя бы один раз. Хмм... я представляю себе табличку (или даже набор табличек), в которых лежат записи о каких-то объектах, и у которой есть сурогатный первичный ключ (4 байта). Массив создается добавлением ссылки на сурогатный ключ в таблички arr0 и arr1. После этого соответствие массивов легко проверяется по индексу, построенному по 4-х байтному полю. PS: На самом деле, я не могу представить себе задачи, где пришлось бы более бестолково сравнивать два массива по 10 метров. Я еще мог бы понять, если бы было нужно найти, например, с какого места они начинают расходиться. Но просто сравнить??!! - ну, допустим, они не равны - какое знание ты получишь из этого? А если равны, то что тогда? PSS: Ты так и не сказал, что за данные находятся в этих массивах. Если там отсутствуют хоть какие-то метаданные, то это просто бредовый набор данных. Смысла сравнивать его с чем-либо, имхо, нет ни какого. Если метаданные есть, то это прямой кандидат для создания базы данных, раскладки содержимого по таблицам и сравнения посредством запроса, указанного мною выше. -- WBR, Roman S. Golubin ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 21:58 |
|
||
|
Сравнение массивов
|
|||
|---|---|---|---|
|
#18+
Aleksey_tДаа, я одну деталь упустил (т.к. надеялся что в шарпе есть что то типа джававского Array.Equals). Данные однородные: массив байтов. И судя по всему другого варианта нет как простой перебор. Тестим: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Результат: 00:00:00.0801152 Скорость сравнения примерно 120 метров в секунду. Не впечатляет? И это на смешном ноутбуке... полностью два едентичных массива по 10 метров. Если бы расхождение было в первом мегабайте, то таких проверок можно было бы делать от сто штук в секунду :-)) -- WBR, Roman S. Golubin PS: А я, думая, что ты сравниваешь сложносоставные объекты, начал еще распинаться про msde :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 23:49 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32865751&tid=1437475]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 417ms |

| 0 / 0 |
