0

Заполняю таблицу этим кодом, вопрос в том что данные обновляются и чтобы при повторном заполнение добавлялись только те данные которых нет в таблице, заполняю в datagridview. То есть как заполнил datagridview при втором заполнение, нужно сравнить входные данные с теми что уже есть в datagridview, чтобы не было повторов данных, то есть остаются старые данные, но прибавляются новые.

foreach (var res in pars.Fonbet())
            {
                string[] res_fonbet = res.Split('|');
                if (res.Contains("Команды"))
                {
                    Fonbet = Regex.Match(res_fonbet[0], "[\\s].*").Groups[0].Value.TrimStart().TrimEnd() + "|";
                    Fonbet_Contains = Regex.Match(Fonbet, "—\\s[^|]*").Groups[0].Value.Replace("— ", "");
                }
                foreach (var res_xs in pars.One_xstavka())
                {
                    string[] res_Xstavka = res_xs.Split('|');
                    Xstavka = Regex.Match(res_Xstavka[0], "[\\s].*").Groups[0].Value.TrimStart().TrimEnd() + "|";
                    if (Xstavka.Contains(Fonbet_Contains))
                    {
                        string ComboBoxText = null;
                        Invoke((MethodInvoker)delegate { ComboBoxText = comboBox1.Text; });
                        double[] KofFonbet = { double.Parse(res_fonbet[1], CultureInfo.InvariantCulture), double.Parse(res_fonbet[2], CultureInfo.InvariantCulture) };
                        double[] kofXstaka = {double.Parse(res_Xstavka[1], CultureInfo.InvariantCulture), double.Parse(res_Xstavka[2], CultureInfo.InvariantCulture) };
                        double resultKofOne;
                        double resultKofTwo;
                        string result = null;                                   
                        if (ComboBoxText == "Fonbet")
                        {
                            if (KofFonbet[0] < KofFonbet[1]) { resultKofOne = KofFonbet[0]; resultKofTwo = kofXstaka[1]; result = "К1 " + " К2"; }
                            else { resultKofOne = KofFonbet[1]; resultKofTwo = kofXstaka[0]; result = "К2 " + " К1"; }
                            RateClass.ResultSumma(summa, resultKofOne, resultKofTwo);
                            if (RateClass.ProcentVilka() > 1)
                            {
                                string[] GridOne = { Regex.Match(res_fonbet[3], "\\s[^.]*").Groups[0].Value.TrimStart() + " Счёт: "+res_fonbet[5] + " Время: " + res_fonbet[6], "1", "2", "Процент" };
                                addGridParam(GridOne, dataGridView1); //Заполняю таблицу
                                string[] K = result.Split(' ');
                                string[] GridTwo = { Fonbet.Replace("|", ""), K[0] + "- " + resultKofOne.ToString(), K[2] + "- " + resultKofTwo.ToString(), RateClass.ProcentVilka().ToString(), RateClass.StavkaOne(Okruglenie).ToString(), RateClass.StavkaTwo().ToString(), RateClass.ProfitOne().ToString(), RateClass.ProfitTwo().ToString(), res_fonbet[4], res_Xstavka[3] };
                                addGridParam(GridTwo, dataGridView1); //Заполняю таблицу
                            }
                        }                        
                    }
                }
            } 
xellan
  • 560
  • 3
  • 11
  • 1
    Код работает, но надо с повторами кода разобраться, я правильно понял? а 4 5 должны вывестись один - что это означает? Какой результат должен получиться? – aepot May 01 '21 at 13:55
  • Еще раз перечитал вопрос - и окончательно запутался. Надо найти пересечение 1 и 2, затем объединить результат с 3 так, чтобы на выходе были только уникальные элементы? Какая исходная задача? – aepot May 01 '21 at 14:05
  • @aepot изменил код на тот что в проекте и изменил суть вопроса. – xellan May 01 '21 at 15:59
  • 1
    Поизучайте https://ru.stackoverflow.com/a/1199692/373567 на досуге. А что вам мешает с помощью if проверить, есть ли такое же значение в таблице? – aepot May 01 '21 at 16:06
  • @aepot для этого нужно делать ещё один цикл что то вроде for (int col = 0; col < dataGridView1.RowCount; col++) { if(res_fonbet[3] != dataGridView1[3, col]) { string[] GridOne = { Regex.Match(res_fonbet[3], "\s[^.]*").Groups[0].Value.TrimStart(), "1", "2", "Процент", "Ставка 1", "Ставка 2", "Победа 1", "Победа 2", "Fonbet", "1Xstavka" }; addGridParam(GridOne, dataGridView1); } } – xellan May 01 '21 at 16:16
  • Но тогда цикл в цикле будет зацикливать данные и будут повторы. К примеру первый цикл выполняется 2 раза, влозженный в него цикл выполняется 3 раза и цикл с сравнение датагрид выполняется столько раз сколько строк он содержит... – xellan May 01 '21 at 16:20
  • 1
    Если на простых списках, то это делается как-то так list1.AddRange(list2.Except(list1)) – aepot May 01 '21 at 16:24
  • @aepot в данном случае у меня оба поля string, входная и с datagridview получаю string и их нужно на неравенство проверять. Если res_fonbet[3] = одной строке, то datagridview может быть 100 строк и их все нужно на неравенство сравнить. Без цикла не понимаю как это сделать, а с циклом не вариант, так как идут повторы... – xellan May 01 '21 at 16:46
  • @aepot Подскажите ещё как можно сравнить два этих листа, Intersect сравнивает последовательность то есть если каждый знак равен. А в моём примере разная последовательность но в строке что в первой что во второй уникальное значение фамилия. То есть берем в первом листе есть уникальное слово и оно может быть в любом порядке и его нужно найти во втором листе. Если есть в двух листах в строках одинаковые слова, то выводим что они равны – xellan May 02 '21 at 05:27
  • Листы List list1 = new List{"Реготун Д — Гноевой Р", "Клипперс — Денвер", "Хорнсби Ку Ринг Гай Спайдерс — Сидней Кометс"}; List list2 = new List{"Дмитрий Реготун (Укр) — Роман Гноевой (Укр)", "Лос-Анджелес Клипперс — Денвер Наггетс с ОТ", "Хорнсби — Сидней Кометс с ОТ", "Реготун Д — Гноевой Р"}; – xellan May 02 '21 at 05:27
  • код, то есть из первого листа перчисляю слова во втром листе и если есть совпадения, то вывожу что они равны. Но у меня куча повторов. Нужен другой подход foreach(var list1Res in list1) { int Num = list1Res.Split(' ').Length; for(int s = 0; s < Num; s++) { string[] Contains = list1Res.Split(' '); Console.WriteLine(Contains[s]); foreach(var list2Res in list2) { if(list2Res.Contains(Contains[s])) { Console.WriteLine(list1Res); break; } } } – xellan May 02 '21 at 05:30
  • @aepot сделал тему с вопросом https://ru.stackoverflow.com/questions/1277308/%d0%a1-%d0%a1%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d1%82%d1%8c-%d0%b4%d0%b2%d0%b0-%d1%81%d0%bf%d0%b8%d1%81%d0%ba%d0%b0-%d0%b8-%d0%bf%d0%be-%d1%83%d0%bd%d0%b8%d0%ba%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%bc-%d1%81%d0%bb%d0%be%d0%b2%d0%b0%d0%bc-%d0%b2-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b0%d1%85 – xellan May 02 '21 at 07:40

0 Answers0