请大家帮忙,ListView1中数据分组到ListView2中
ListView1中一共有7列数据。如果某一行(Item)的第2列(Strings[0])和第7列(Strings[5])中字符串完全和另一行的第2列和第7列完全相同,那么就统计下来,然后找出所有这样同类的,将统计的结果放在ListView2中。下面两个图是效果,但是我的代码写出来,循环的过程中会重复统计:譬如第1行和第2行是同类(即它们的第2列和第7列完全一样),外循环固定在第1行时,内循环从第2行往下一直遍历整表,找出若干个和第1行同类的;然后外循环固定在第2行,内循环从第3行再开始往下遍历整表,又找出和第2行同类的若干个数据,但是第1行本来和第2行就同类,这样相当于统计了两遍,如此下去,和第1行同类的越靠上的数据则会被多次统计,如何解决这个问题呢?不知道我说明白没。大家帮忙看看如何解决,非常感谢
下面是我的程序代码:
int count = 0; //用于元件个数计数AnsiString package, comment; //元件封装和元件备注中间变量for(int i = 0; i < ListView1 -> Items -> Count; i++) { for(int j = i; j < ListView1 -> Items -> Count; j++) { if(ListView1 -> Items -> Item[i] -> SubItems -> Strings[0] == ListView1 -> Items -> Item[j] -> SubItems -> Strings[0] && ListView1 -> Items -> Item[i] -> SubItems -> Strings[5] == ListView1 -> Items -> Item[j] -> SubItems -> Strings[5]) { ++count; package = ListView1 -> Items -> Item[i] -> SubItems -> Strings[0]; //封装类型所在列 comment = ListView1 -> Items -> Item[i] -> SubItems -> Strings[5]; //元件备注所在列 } } TListItem *csvgroup = ListView2 -> Items -> Add(); csvgroup -> Caption = package; csvgroup -> SubItems -> Add(comment); csvgroup -> SubItems -> Add(IntToStr(count)); }
for(int i = 0; i < ListView1 -> Items -> Count; i++) //先把List1中封装列和备注列全部写入List2中 { TListItem *csvgroup = ListView2 -> Items -> Add(); csvgroup -> Caption = ListView1 -> Items -> Item[i] -> SubItems -> Strings[0]; //封装列 csvgroup -> SubItems -> Add(ListView1 -> Items -> Item[i] -> SubItems -> Strings[5]); //备注列 }int count; //用于元件个数计数for(int j = 0; j < ListView2 -> Items -> Count; j++) //在List2中进行同类删除和计数 { for(int k = j + 1; k < ListView2 -> Items -> Count; k++) { if(ListView2 -> Items -> Item[k] -> Caption == ListView2 -> Items -> Item[j] -> Caption && ListView2 -> Items -> Item[k] -> SubItems -> Strings[0] == ListView2 -> Items -> Item[j] -> SubItems -> Strings[0]) ListView2 -> Items -> Item[k] -> Delete(); count++; }// [b]ListView2 -> Items -> Item[j] -> SubItems -> Strings[1] = IntToStr(count); //个数写入到List2中的第3列,即Strings[1][/b] count = 1; //每一次外循环count计数都重新从1开始 }