2016-10-26 5 views
1

У меня есть ArrayList с множеством элементов на нем, каждый из них является строкой, разделенной запятыми «loglogs», три первых элемента - это локализация (Destin, lat и long). Мне нужно вставить строки этих журналов в кнопки в зависимости от его локализации (на основе этих трех параметров) в кнопке Tooltip или тексте программно. У меня есть все кнопки создания, но я должен добавить строки, но есть больше журналов, чем кнопки, поэтому ...Фильтр arraylist с условием

Мне нужно «фильтровать» ArrayList в другой массив ArrayList, фильтровать его в зависимости от этих трех внутренних координат, I хотите создать еще один ArrayList, но добавив строки, которые идентичны в трех первых элементах списка arrayList. Таким образом я объединю «loglogs» в другой «loglogsCondensed», причем вся «локализация» уникальна, поэтому я могу добавить эту часть к моей кнопке и созданию индекса.

 foreach (String log in logslogs) 
     { 
      String[] colContent = log.Split(','); //splited the content with commas 
      Loglog log = new Loglog(); //Loglog is a class of logs with information in specific columns 
      log.Destin = colContent[0]; 
      log.Lat = Convert.ToChar(colContent[1]); 
      log.Long = colContent[2];     
      log.Barcode = colContent[6]; 
      log.Source = colContent[7];     
      log.SampleName = colContent[9];     
      AllLogs.Add(log); 

мне нужно пройти от logslogs 1000 ЧЛЕНОВ к ArrayList с меньшим количеством предметов, где те, с таким же адресом на основе трех первых пунктов добавляются как один элемент.

Suposse это довольно легко, если вы знаете, как правильно закодировать (не в моем случае). Тысяча благодарностей за то, что прочитали это, даже больше, чтобы люди, которые пытаются помочь.

Бест,

ответ

0

У меня есть решение !, вероятно, не собирается выиграть любой конкурс cleaneness, но это не то, что мне нужно !. Я создаю индекс для фильтрации сравнения элементов в зависимости от трех координат: Destin, Long и Lat. Если они такие же, я удалить последний элемент и поместить прилагаемую линию на последнем месте и так далее ...

int c = 0; //Just to go the first time 
    //We create an index to compare the former with the "actual"  
    //log in every loop of the "foreach" 

     String IndiceDestin0 = string.Empty; 
     String IndiceLat0 = string.Empty; 
     String IndiceLong0 = string.Empty; 

     String IndiceDestin1; 
     String IndiceLat1; 
     String IndiceLong1;   

     foreach (String log in logslogs) 
     { 
      String[] LongContent = log.Split(','); 
      Loglog log = new Loglog(); 
      log.Destin = LongContent[0]; 
      log.Lat = Convert.ToChar(LongContent[1]); 
      log.Long = LongContent[2];     
      log.Barcode = LongContent[6]; 
      log.Source = LongContent[7]; 
      log.DestDestinBarcode = LongContent[8]; 
      log.SampleName = LongContent[9];     
      AllLogs.Add(log); 

      //This only works once, the first time because we don't have a "former" data to compare we have to bypass the comparison 
      if (c == 0) 
      { 
       IndiceDestin0 = LongContent[0]; 
       IndiceLat0 = LongContent[1]; 
       IndiceLong0 = LongContent[2]; 
       c++; 
      } 
      else 
      { 
       IndiceDestin1 = LongContent[0]; 
       IndiceLat1 = LongContent[1]; 
       IndiceLong1 = LongContent[2]; 

       if (IndiceDestin0.Equals(IndiceDestin1) && IndiceLat0.Equals(IndiceLat1) && IndiceLong0.Equals(IndiceLong1)) 
       {       
        int last = logsToButtons.Count - 1; 
        string oldLog = logsToButtons[last].ToString(); 
        string appendedLog = oldLog + log; 
        //We remove the last "single" log to add the aggregated log 
        logsToButtons.RemoveAt(last); 

        logsToButtons.Add(appendedLog);       
       } 
       else 
       { 
        logsToButtons.Add(log); 
       } 

       IndiceDestin0 = IndiceDestin1; 
       IndiceLat0 = IndiceLat1; 
       IndiceLong0 = IndiceLong1; 
       c++; 
      }        

     } 

я иметь более короткую версию массива, но добавляя вместе те, которые имеют те же координаты, спасибо всем за вашу помощь, я знаю, что это грязно, но это работает!

Лучшие,

Смежные вопросы