Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2016, 19:28   #1
Дима85
Пользователь
 
Регистрация: 11.06.2016
Сообщений: 20
По умолчанию Поиск минимального количества повторов чисел

У меня есть код по поиску просто количества одинаковых чисел в активных текстбоксах по нажатию кнопки и вывод этого количества в label2:
C#
Код:
        private void button1_Click(object sender, EventArgs e)
        {
            foreach (TextBox tb in Controls.OfType<TextBox>().Where(x => x.Enabled == true))
            {
                label2.Text = Controls.OfType<TextBox>().SelectMany(x => x.Text.Split(" ;:,.-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)).GroupBy(x => x).Count(x => x.Count() > 1).ToString();
            }
        }
Подскажите, как мне переделать этот код, чтобы он сравнивал не все активные текстбоксы сразу, а каждый с другим, например, первый со вторым, первый с третьим и т. д., затем возвращался ко второму и сравнивал его со следующими, ну и так далее. Это первое. Второе - нужно, чтобы код после сравнения текстбоксов друг с другом вывел в текст лэйбла (можно хоть куда) минимальное количество одинаковых чисел, можно даже 0, то есть даже если совпадений вообще нет. И хотелось бы, чтобы после всего этого всё-таки как-то выявить в каких текстбоксах было найдено минимум повторяющихся чисел, например, поменять их фоновые цвета (BackColor) на другие.

Небольшое пояснение ко всему этому.
В коде tb - это массив нескольких текстбоксов.
В каждом тектбоксе все числа разные и не повторяются, они вводятся пользователем, а не рандомно, и через пробел.
И для понятности приведу простой пример с тремя текстбоксами. В первом есть числа 10 15 20, во-втором 10 11 25, в третьем 30 11 25. Здесь видно, что у первого со вторым одно совпадение, у второго с третьим два, у первого с третьим ни одного. В итоге мин. кол-во одинаковых чисел - 0, и это число вставляется в текст лэйбла, а текстбоксы первый и третий меняют свой цвет фона.
Наговорил много, но думаю для многих это будет простая задачка. )))
Да, и ещё, если будет не трудно, как мне сделать, чтобы по нажатию уже другой кнопки сравнивать текстбоксы не каждый с каждым, а только первый со всеми остальными? Например, если текстбокса 3, то сравнить первый со вторым и с третьим, а уже второй с третьим не надо. Ну и опять же после всего этого вывести минимум и поменять цвет фонов.
Заранее большое спасибо.
Дима85 вне форума Ответить с цитированием
Старый 22.07.2016, 15:09   #2
Дима85
Пользователь
 
Регистрация: 11.06.2016
Сообщений: 20
По умолчанию

Что, ни кто не может помочь?
Дима85 вне форума Ответить с цитированием
Старый 23.07.2016, 22:26   #3
EveKS
 
Регистрация: 23.07.2016
Сообщений: 5
По умолчанию

Дима85,

Встречный вопрос, для чего в вашей конструкции цикл?
А точнее понимаете-ли вы что у вас там цикл и что значит эта часть:
Код:
foreach (TextBox tb in
Дам подсказку: tb.Select
EveKS вне форума Ответить с цитированием
Старый 23.07.2016, 22:37   #4
EveKS
 
Регистрация: 23.07.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Дима85 Посмотреть сообщение
чтобы он сравнивал не все активные текстбоксы сразу, а каждый с другим, например, первый со вторым, первый с третьим и т. д.
А это перебор, который можно реализовать через IEnumerable или просто циклами, определив, предварительно, количество TextBox, можно через Count(). Перебор или по именам или по Tag.

Думаю, через foreach не получится.
EveKS вне форума Ответить с цитированием
Старый 24.07.2016, 18:16   #5
EveKS
 
Регистрация: 23.07.2016
Сообщений: 5
По умолчанию

Вот мое решение:
Код:
        private void button1_Click(object sender, EventArgs e)
        {
            Controls.OfType<TextBox>().Where(t => t.Enabled == true).ToList().ForEach(tb =>
            {
                var _tb = tb.Text.Split(" ;:,.-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
                Controls.OfType<TextBox>().Where(t => t != tb).ToList().ForEach(t =>
                    {
                        var _t = t.Text.Split(" ;:,.-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
                        _t.ForEach(s =>
                        {
                            if (_tb.Contains(s))
                            {
                                t.BackColor = Color.Red;
                                tb.BackColor = Color.Red;
                            }
                        });
                    });
            });
            label1.Text = Controls.OfType<TextBox>().SelectMany(t => t.Text.Split(" ;:,.-".ToCharArray(),
                StringSplitOptions.RemoveEmptyEntries)).GroupBy(t => t).Where(t=>t.Count()>1).Min(t => t.Count()).ToString();
        }
EveKS вне форума Ответить с цитированием
Старый 24.07.2016, 18:24   #6
EveKS
 
Регистрация: 23.07.2016
Сообщений: 5
По умолчанию

Но, я не понял этого:
Цитата:
минимальное количество одинаковых чисел, можно даже 0
Цитата:
10 15 20, во-втором 10 11 25, в третьем 30 11 25
Но тут минимальное количество одинаковых чисел, это -- 2. т.е. одинаковые числа всё же есть.
Допустим у нас такие строки:
12121 12 12 1 21 21 21 2 1
42 24 2 423 2 43 24
2. 2.4.32. 423. 4.2 .4 2.4. 32. 4.2
2,4, 2,4,234,23, 423, 4,23 ,423, 4,2 ,2 ,4
2;4;234;23;4 3;24;23; 432; 4;23 4;23 ;4
2 ;423; 4;2 ;42;3 4;23 ;4
;24; 23; 4;23 4;23; 4;23
2 432 42 24 2 423
45 45 645 6
75 567 56
56 65 865 7

Мой код выведет 2, т.е. минимальный повтор одного из чисел в другом, содержится всего в 2х текстбоксах.
И подсветит все тб, кроме 45 45 645 6

Последний раз редактировалось EveKS; 24.07.2016 в 18:38. Причина: Немного орфографии...
EveKS вне форума Ответить с цитированием
Старый 24.07.2016, 18:40   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, а разве тот кто что я вам ранее давал не способен этого дать?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.07.2016, 18:55   #8
EveKS
 
Регистрация: 23.07.2016
Сообщений: 5
По умолчанию

Просмотрел, темку, что была до этого, на эту тему, удивило, что здесь автор не смог передать суть задачи... Да и решение там есть, правда под минимум переделать...
EveKS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчёт количества повторов элементов одномерного массива tane Помощь студентам 0 22.01.2016 18:25
поиск всех повторов за прошедшие 30 дней Bugizavr Microsoft Office Excel 1 22.01.2015 22:27
Обработка одномерного массива - поиск среднего, поиск минимального, сортировка (Паскаль) nadez Паскаль, Turbo Pascal, PascalABC.NET 3 18.03.2014 08:45
Поиск повторов volanddd Microsoft Office Excel 1 30.04.2013 09:34
Поиск комментариев и повторов строк arcus Visual C++ 0 11.11.2012 15:19