Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как просто проверить что массивы одинаковые? 
V
    Опции темы
ZUBR80
Дата 17.5.2006, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: нет
Всего: 2



Есть два массива например чисел.
Что-то я не могу найти функции, которая бы проверила, что массивы одинаковые.
Неужели надо самому писать поэлементное сравнение? 
PM MAIL   Вверх
ivashkanet
Дата 17.5.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Думаю, да. А чем тебе не нравится поэдементное сравнивание? 
PM MAIL WWW ICQ   Вверх
ZUBR80
Дата 17.5.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: нет
Всего: 2



Длинно очень... smile 
Куда проще написать a = b  
PM MAIL   Вверх
ivashkanet
Дата 17.5.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(ZUBR80 @  17.5.2006,  09:11 Найти цитируемый пост)
a = b  

Сравнит ссылки (если бы позволил C#  smile )
Могу помочь  smile 
Код

       public bool ArrayCompare(int[] a, int[] b)
        {
            if (a.Length == b.Length)
            {
                for (int i = 0; i < a.Length; i++)
                {
                    if (a[i] != b[i]) { return false; };
                }
                return true;
            }
            return false;
        }
 
PM MAIL WWW ICQ   Вверх
ZUBR80
Дата 17.5.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: нет
Всего: 2



Сравнивать ссылки должен a is b.
А сравнивать содержимое должен a=b. 
PM MAIL   Вверх
ivashkanet
Дата 17.5.2006, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Время отработки на миллионном массиве int-ов (полный проход) : 156203 тиков таймера, или ~15.6 милисекунд  smile 
P4 2.4

Добавлено @ 09:39 
Цитата(ZUBR80 @  17.5.2006,  09:29 Найти цитируемый пост)
a=b.

Ну тогда уж a==b, а a=b занимется присваиванием 
PM MAIL WWW ICQ   Вверх
VisualProgrammerNET
Дата 17.5.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



А метод Equals() никак?  smile  


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
ivashkanet
Дата 17.5.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(VisualProgrammerNET @  17.5.2006,  11:15 Найти цитируемый пост)
А метод Equals() никак? 

Так и знал, что кто-нибудь спросит  smile 

VisualProgrammerNET, а ты пробовал  smile 
У меня не получилось. Equals() возвращает true только, если сравниваю один и тот же объект  smile Хотя, по идее, должен бы работать. 
PM MAIL WWW ICQ   Вверх
-ser-
Дата 17.5.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 5
Всего: 13



Equals сравнивает только ссылки, по другому он и не работает.
Цитата

The default implementation of Equals supports reference equality only

т.е. он он даст true только если мы одному инстансу класса, того же допустим ArrayList, явно присвоим другой инстанс этого же класса.

я что-то тоже не пойму большого смысла перегрузки метода Equals в ArrayList. он все равно те же ссылки двух массивов проверяет. не велика разница, что ссылки на объекты проверять, что на массивы. 


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
ZUBR80
Дата 17.5.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: нет
Всего: 2



Речь идет не о ArrayList, а о Array.
Странно, что в статик методах Array нет команды сравнивания smile
 
PM MAIL   Вверх
Exception
Дата 17.5.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(ZUBR80 @  17.5.2006,  10:29 Найти цитируемый пост)
Сравнивать ссылки должен a is b.
А сравнивать содержимое должен a==b.  


Мне интересен пример применения is со структурными объектами вроде int smile  
PM   Вверх
Void
Дата 18.5.2006, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



is тут вообще не при чем. Он устанавливает отношение subtyping'а, а не равенство ссылок. Справа от is должен стоять тип, а не значение. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
jorikdima
Дата 14.2.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

Репутация: нет
Всего: нет



Извиняюсь что поднимаю старую тему.

Вопрос новичка. Два одинаковых массива byte[]

new byte[] {0xFF,0xFF}

Неужели никак не проверить их эквивалентность кроме как побайтово??? Почему нет статического метода в Array?? Или Equals непереопределен в Array как надо????
PM MAIL   Вверх
Raid
Дата 14.2.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.6.2007
Где: Москва

Репутация: нет
Всего: нет



Не говорю, что я спец в этом и если что-то неправильно напишу не ругайте сильно - я только учусь.
  smile 
"В общем случае массив представляет собой набор элементов, расположенных непрерывно в области памяти"

В классе object определено 2 метода Equals. Один из них не статический. Он проверяет равенство ссылок a.Equals(b)
Второй статический, и проверяет равенство содержимого значений в ячейках памяти.  Equals(a, b)
И если вызывать второй, который должен сравнивать содержимое и передавать ему массив, то он должен сравнивать содержимое ячеек памяти, в которой собственно хранится "ссылка" - адрес первого элемента массива. Для разных массивов, пусть даже и содержащих одинаковые элементы он очевидно разный.

Статический метод достался Array от Object.

Если где-то ошибся, подправьте.
PM MAIL   Вверх
FractalizeR
Дата 14.2.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: -1
Всего: 4



Ячейки памяти в любом случае сравниваться с помощью Equals не будут. Встроенного механизма сравнения массивов в C# нет. Нужно писать свой.


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.