Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 2 / 0
Регистрация: 18.02.2018
Сообщений: 29

Будет ли indexOf сравнивать объекты?

10.03.2021, 14:09. Показов 733. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Будет ли indexOf сравнивать объекты?

Например:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var obj = new List<object[]>();
obj.Add(new object[] { "10.10.10.1", "arp", "fdfdf", "qwe" });
obj.Add(new object[] { "10.10.10.2", "arp", "fdfdf", "qwe" });
obj.Add(new object[] { "10.10.10.3", "arp", "fdfdf", "qwe" });
obj.Add(new object[] { "10.10.10.4", "arp", "fdfdf", "qwe" });
obj.Add(new object[] { "10.10.10.1", "dadsada", "aaafdfdf", "bbbqwe" });
obj.Add(new object[] { "10.10.10.1", "456", "aaafdfdf", "bbbqwe" });
 
var objNew = new object[] { "10.10.10.1", "456", "aaafdfdf", "bbbqwe" };
 
CheckUniq(objNew, obj);
 
static void CheckUniq(object[] objNew, List<object[]> obj)
{
    int index = obj.IndexOf(objNew);
    Console.WriteLine(index);
    foreach(var item in obj)
    {
        Console.WriteLine(item.SequenceEqual(objNew));
    }
}
Вывод:

Code
1
2
3
4
5
6
7
-1
False
False
False
False
False
True
Есть ли возможность получить индекс такого элемента в списке без сложных конструкций?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2021, 14:09
Ответы с готовыми решениями:

Как сравнивать объекты enum?
Доброго времени суток. Подскажите, пожалуйста, как можно реализовать сравнение элементов перечисления (enum)? Пробовал сделать так: ...

Как правильно сравнивать объекты?
Есть такой код поиска public ActionResult PhoneDirectory(string nameText, string surnameText) { ...

Сравнивать объекты, как начать?
Привет всем еще раз. Есть первые данные - название, вес, скорость и таких 7 штук Есть вторые данные - прочность и таких от 0 до 100 ...

7
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.03.2021, 14:14
C#
1
int index = obj.FindIndex(item => item.SequenceEquals(objNew));
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,110
Записей в блоге: 2
10.03.2021, 19:31
Amperandus, советую? в данной задаче, вместо object[] использовать кортежи.
И запись упростится и сравнивать будет проще.
C#
1
2
3
4
5
6
7
var list = new List<(string date, string name, string secondName, string surname)>();
list.Add(("10.10.10.1", "arp", "fdfdf", "qwe" ));
list.Add(("10.10.10.2", "arp", "fdfdf", "qwe"));
list.Add(("10.10.10.3", "arp", "fdfdf", "qwe"));
list.Add(("10.10.10.4", "arp", "fdfdf", "qwe"));
list.Add(("10.10.10.1", "dadsada", "aaafdfdf", "bbbqwe"));
list.Add(("10.10.10.1", "456", "aaafdfdf", "bbbqwe"));
Добавлено через 1 минуту
C#
1
2
3
4
5
6
7
8
9
static void CheckUniq((string date, string name, string secondName, string surname) objNew, List<(string date, string name, string secondName, string surname)> list)
{
    int index = obj.IndexOf(objNew);
    Console.WriteLine(index);
    foreach(var item in obj)
    {
        Console.WriteLine(item.Equals(objNew));
    }
}
Добавлено через 1 минуту
имена полей можно не задавать, если нет надобности обращения к ним.
1
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
10.03.2021, 19:44
Элд Хасп, я бы предложил взглянуть в сторону ООП, например, класс... тут, возможно, зайдет record, хотя для меня остается загадкой, на кой ляд его такой выдумали...
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,110
Записей в блоге: 2
10.03.2021, 20:12
Цитата Сообщение от Diamante Посмотреть сообщение
я бы предложил взглянуть в сторону ООП, например, класс...
Оптимально - да.
Но там больше возни с кодом.
Придётся задавать Equls и GetHasCode.
В кортежах уже есть вложенная реализация сравнения по значению.
Поэтому если в одном месте, то проще использовать кортеж.
1
1 / 2 / 0
Регистрация: 18.02.2018
Сообщений: 29
11.03.2021, 10:28  [ТС]
Такой тип из-за возврата данных из БД. Тут упрощенный пример просто. При рефракторинге возможно сделаю изменения, пока так, как есть.

Добавлено через 2 часа 54 минуты
Сюда же спрошу: как упростить код - преобразовать выборку из базы данных в виде DapperRow

Сейчас вот так сделано:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var qs = db.Query("uniq")
        .Select("mac", "ip", "fdqn", "snmp_name", "snmp_model", "snmp_community")
        .WhereStarts("ip", network)
        .GroupBy("mac", "ip", "fdqn", "snmp_name", "snmp_model", "snmp_community")
        .OrderByDesc("updated")
        .Get();
 
foreach(var item in qs)
{
    var old = new List<object>()
    {
        item.mac,
        item.ip,
        item.fdqn,
        item.snmp_name,
        item.snmp_model,
        item.snmp_community,
    };
    Console.WriteLine(old.SequenceEqual(test1));
}
без создания нового объекта SequenceEqual применить не получается.

Хотелось бы вида:
C#
1
qs.ToList().FindIndex(x => x.Values.SequenceEqual(test1));
0
1 / 2 / 0
Регистрация: 18.02.2018
Сообщений: 29
11.03.2021, 10:45  [ТС]
0
1 / 2 / 0
Регистрация: 18.02.2018
Сообщений: 29
12.03.2021, 09:09  [ТС]
заморочился...

C#
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class HostUniq
    {
        public string mac;
        public string ip;
        public string fdqn;
        public string snmp_name;
        public string snmp_model;
        public string snmp_community;
 
        public HostUniq(object mac, object ip, object fdqn, object snmp_name, object snmp_model, object snmp_community)
        {
            this.mac = Convert.ToString(mac);
            this.ip = Convert.ToString(ip);
            this.fdqn = Convert.ToString(fdqn);
            this.snmp_name = Convert.ToString(snmp_name);
            this.snmp_model = Convert.ToString(snmp_model);
            this.snmp_community = Convert.ToString(snmp_community);
        }
 
        protected static bool EqualsHelper(HostUniq first, HostUniq second) =>
            first.mac == second.mac &&
            first.ip == second.ip &&
            first.fdqn == second.fdqn &&
            first.snmp_name == second.snmp_name &&
            first.snmp_model == second.snmp_model &&
            first.snmp_community == second.snmp_community;
 
        public override bool Equals(object obj)
        {
            if((object)this == obj)
                return true;
 
            var other = obj as HostUniq;
 
            if ((object)other == null)
                return false;
 
            return EqualsHelper(this, other);
        }
 
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
    }
C#
1
2
3
4
5
6
7
var newHostUniq = new HostUniq(
                "503e.xxxx.xxxx",
                "10.xx.xxx.xxx",
                "infokiosk.xxx.local",
                null,
                null,
                null);
C#
1
2
3
4
5
var res = qs.Select(x => new HostUniq(x.mac,x.ip, x.fdqn, x.snmp_name, x.snmp_model, x.snmp_community)).ToList();
if(res.FindIndex(x => x.Equals(newHostUniq)) != -1)
{
    Console.WriteLine("Have an item");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.03.2021, 09:09
Помогаю со студенческими работами здесь

В чем разница данных методов IndexOf и IndexOf<>
Доброго времени суток. Подскажите пожалуйста в чем отличие методов с символами &lt;&gt; и без них ?

Нужно создать программу, которая будет сравнивать кол-во цифр в двух числах
Нужно создать программу в C#, которая будет сравнивать кол-во цифр в двух числах и выводить ответ в label.

Составить программу которая будет сравнивать согласные и гласные и считать их до первой точки
Помогите составить программу в pascal .(Я сильно на вас надеюсь). Составить программу которая будет сравнивать согласные и гласные и...

Написать функцию, которая будет разбивать строку на символы и сравнивать с другими символами из другой строки.
Нужно написать функцию которая будет разбивать строку на символы и сравнивать с другими символами из другой строки. Если среди них будут...

Какой из методов рациональнее использовать: Array.prototype.indexOf() или String.prototype.indexOf()
функции передаётся буква алфавита в нижнем регистре и она должна вернуть следующую по очереди букву алфавита в нижнем регистре при этом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru