去除listbox中重复项,具有成功案例的情况下,又失败了,顶帖也送分了

时间:2022-02-17 19:37:33
原来,我做了一个页面,需要去除listbox中的重复项,页面上有两个listbox,其中一个需要去除重复项
直接在.cs中写入以下代码即可

//去除listbox中的重复项开始
    private void Distinct(ListItemCollection items)
    {
        for (int i = 0; i < items.Count; i++)
        {
            for (int j = i + 1; j < items.Count; j++)
            {
                if (items[i].Equals(items[j]))
                    items.Remove(items[j]);
            }

        }
    }

    //去除listbox中的重复项结束



但是我又做一个页面,有四个listbox,其中三个也需要去除重复项,结果把上面这段代码复制到相应的.cs文件中,结果一个也没过滤掉,晕,死,不知道怎么因事,请高手帮助一下啊

19 个解决方案

#1


首先listBox1.Sorted = true;
然后循环
比较当前这个是不是和下一个一样,一样的话就remove
  object o = listBox1.Items[0];
            for (int i = 1; i < listBox1.Items.Count; i++)
            {
                if (o.Equals(listBox1[i]))
                    listBox1.Items.Remove(i);
                else
                    o = listBox1.Items[i];

            }

#2


引用 1 楼 ericzhangbo1982111 的回复:
首先listBox1.Sorted = true; 
然后循环 
比较当前这个是不是和下一个一样,一样的话就remove 
  object o = listBox1.Items[0]; 
            for (int i = 1; i  < listBox1.Items.Count; i++) 
            { 
                if (o.Equals(listBox1[i])) 
                    listBox1.Items.Remove(i); 
                else 
                    o = listBox1.Items[i]; 

            } 

学习了!!

#3


1楼的正解~

#4


        private void  Deleted(object obj)
        {
            System .Collections .ArrayList list=new System.Collections.ArrayList ();
            list .Add (((ListBox )obj).Items [0]);
            for (int i = 1; i < listBox1.Items.Count; i++)
            {
                if (list.Contains(listBox1.Items[i]))
                    continue;
                else
                    list.Add(listBox1.Items[i]);
            }

            listBox1.DataSource = list;

        }

#5


Deleted(this.listBox1);
        private void  Deleted(object obj)
        {
            System .Collections .ArrayList list=new System.Collections.ArrayList ();
            list .Add (((ListBox )obj).Items [0]);
            for (int i = 1; i < listBox1.Items.Count; i++)
            {
                if (list.Contains(listBox1.Items[i]))
                    continue;
                else
                    list.Add(listBox1.Items[i]);
            }

            listBox1.DataSource = list;

        }

#6


先ding

#7


该回复于2008-05-20 18:29:20被版主删除

#8


引用 1 楼 ericzhangbo1982111 的回复:
首先listBox1.Sorted = true; 
然后循环 
比较当前这个是不是和下一个一样,一样的话就remove 
  object o = listBox1.Items[0]; 
            for (int i = 1; i  < listBox1.Items.Count; i++) 
            { 
                if (o.Equals(listBox1[i])) 
                    listBox1.Items.Remove(i); 
                else 
                    o = listBox1.Items[i]; 

            } 


学习

#9


......还真的不时正确的。
有2个地方打错了 哈哈,谅解

 listBox1.Sorted = true;
            object o = listBox1.Items[0];
            List<object> list = new List<object>();
            list.Add(o);
            for (int i = 1; i < listBox1.Items.Count; i++)
            {
                if (o.Equals(listBox1.Items[i]))
                    listBox1.Items.RemoveAt(i);
                else
                {
                    o = listBox1.Items[i];
                    list.Add(o);
                }

            }
            listBox1.Items.Clear();
            listBox1.DataSource = list;

#10


我这里有四个listbox,都需要去掉重复项,怎么办

我发的那个成功的代码,就去除了两个listbox的重复项,显得很简单,再一个,两个数据表的结构也差不多,但是为什么不对呢,大家都说一楼的正确,难道有多少个listbox就要写多少段程序?

有没有更简单,易明白的程序啊

#11


你可以懒点,把这个方法单独写一个方法,以后有这情况,调用该方法就行了。
Methord(listbox l)
{
  ......
}

#12


帮着看看。。。希望大家帮忙啊,眼睛都看花了

#13


你绑定的时候就不要绑重复项啊,干嘛加了再删

#14


要查询数据库的时候用distinct不就没有重复数据??为什么还要再删?

#15


引用 2 楼 yagebu1983 的回复:
引用 1 楼 ericzhangbo1982111 的回复:
首先listBox1.Sorted = true;
然后循环
比较当前这个是不是和下一个一样,一样的话就remove
object o = listBox1.Items[0];
for (int i = 1; i   < listBox1.Items.Count; i++)
{
if (o.Equals(listBox1[i]))
listBox1.Items.Remove(i);
else
o = listBox1.Items[i];

}

学习了!!



這種想法好,不用雙重循環

#16


虽然一楼的方法,我没有采取,在此也表示感谢,毕竟一楼第一回发错了代码,后来又更改了,但是某些人,学习一楼的方法也无可厚非,究竟是不是正解,我想也没有得到验证吧,最过分的是某些人,明明一楼都说自己代码错了,又重新改动了,某些人啊,还是引用一楼的内容,还高唱正解,真是搞不懂,顶帖就顶帖,不要给人造成误解,你就算是纯粹顶帖,我也会送分给你,可是你是滥竽充数,这难免让我觉得气愤,所以,经过一番思量,对于一楼更改代码后的,又再次引用一楼更新前代码的同志处于无分处理!

#17


没遇到过,一起学习!

#18


//去除listbox中的重复项开始
    private void Distinct(ListItemCollection items)
    {
        for (int i = 0; i < items.Count; i++)
        {
            for (int j = items.Count - 1; j < items.Count-i; j++)
            {
                if (items[i].Equals(items[j]))
                    items.Remove(items[j]);
            }

        }
    }

    //去除listbox中的重复项结束
    这样才是正确的 如果j++的话 item[j]就是集合前面的数据  应该先删除集合后面的数据 才正确

#19


//去除listbox中的重复项开始
//刚发错了  是j--
  private void Distinct(ListItemCollection items)
  {
  for (int i = 0; i < items.Count; i++)
  {
  for (int j = items.Count - 1; j < items.Count-i; j--)
  {
  if (items[i].Equals(items[j]))
  items.Remove(items[j]);
  }

  }
  }

  //去除listbox中的重复项结束
  这样才是正确的 如果j++的话 item[j]就是集合前面的数据 应该先删除集合后面的数据 才正确

#1


首先listBox1.Sorted = true;
然后循环
比较当前这个是不是和下一个一样,一样的话就remove
  object o = listBox1.Items[0];
            for (int i = 1; i < listBox1.Items.Count; i++)
            {
                if (o.Equals(listBox1[i]))
                    listBox1.Items.Remove(i);
                else
                    o = listBox1.Items[i];

            }

#2


引用 1 楼 ericzhangbo1982111 的回复:
首先listBox1.Sorted = true; 
然后循环 
比较当前这个是不是和下一个一样,一样的话就remove 
  object o = listBox1.Items[0]; 
            for (int i = 1; i  < listBox1.Items.Count; i++) 
            { 
                if (o.Equals(listBox1[i])) 
                    listBox1.Items.Remove(i); 
                else 
                    o = listBox1.Items[i]; 

            } 

学习了!!

#3


1楼的正解~

#4


        private void  Deleted(object obj)
        {
            System .Collections .ArrayList list=new System.Collections.ArrayList ();
            list .Add (((ListBox )obj).Items [0]);
            for (int i = 1; i < listBox1.Items.Count; i++)
            {
                if (list.Contains(listBox1.Items[i]))
                    continue;
                else
                    list.Add(listBox1.Items[i]);
            }

            listBox1.DataSource = list;

        }

#5


Deleted(this.listBox1);
        private void  Deleted(object obj)
        {
            System .Collections .ArrayList list=new System.Collections.ArrayList ();
            list .Add (((ListBox )obj).Items [0]);
            for (int i = 1; i < listBox1.Items.Count; i++)
            {
                if (list.Contains(listBox1.Items[i]))
                    continue;
                else
                    list.Add(listBox1.Items[i]);
            }

            listBox1.DataSource = list;

        }

#6


先ding

#7


该回复于2008-05-20 18:29:20被版主删除

#8


引用 1 楼 ericzhangbo1982111 的回复:
首先listBox1.Sorted = true; 
然后循环 
比较当前这个是不是和下一个一样,一样的话就remove 
  object o = listBox1.Items[0]; 
            for (int i = 1; i  < listBox1.Items.Count; i++) 
            { 
                if (o.Equals(listBox1[i])) 
                    listBox1.Items.Remove(i); 
                else 
                    o = listBox1.Items[i]; 

            } 


学习

#9


......还真的不时正确的。
有2个地方打错了 哈哈,谅解

 listBox1.Sorted = true;
            object o = listBox1.Items[0];
            List<object> list = new List<object>();
            list.Add(o);
            for (int i = 1; i < listBox1.Items.Count; i++)
            {
                if (o.Equals(listBox1.Items[i]))
                    listBox1.Items.RemoveAt(i);
                else
                {
                    o = listBox1.Items[i];
                    list.Add(o);
                }

            }
            listBox1.Items.Clear();
            listBox1.DataSource = list;

#10


我这里有四个listbox,都需要去掉重复项,怎么办

我发的那个成功的代码,就去除了两个listbox的重复项,显得很简单,再一个,两个数据表的结构也差不多,但是为什么不对呢,大家都说一楼的正确,难道有多少个listbox就要写多少段程序?

有没有更简单,易明白的程序啊

#11


你可以懒点,把这个方法单独写一个方法,以后有这情况,调用该方法就行了。
Methord(listbox l)
{
  ......
}

#12


帮着看看。。。希望大家帮忙啊,眼睛都看花了

#13


你绑定的时候就不要绑重复项啊,干嘛加了再删

#14


要查询数据库的时候用distinct不就没有重复数据??为什么还要再删?

#15


引用 2 楼 yagebu1983 的回复:
引用 1 楼 ericzhangbo1982111 的回复:
首先listBox1.Sorted = true;
然后循环
比较当前这个是不是和下一个一样,一样的话就remove
object o = listBox1.Items[0];
for (int i = 1; i   < listBox1.Items.Count; i++)
{
if (o.Equals(listBox1[i]))
listBox1.Items.Remove(i);
else
o = listBox1.Items[i];

}

学习了!!



這種想法好,不用雙重循環

#16


虽然一楼的方法,我没有采取,在此也表示感谢,毕竟一楼第一回发错了代码,后来又更改了,但是某些人,学习一楼的方法也无可厚非,究竟是不是正解,我想也没有得到验证吧,最过分的是某些人,明明一楼都说自己代码错了,又重新改动了,某些人啊,还是引用一楼的内容,还高唱正解,真是搞不懂,顶帖就顶帖,不要给人造成误解,你就算是纯粹顶帖,我也会送分给你,可是你是滥竽充数,这难免让我觉得气愤,所以,经过一番思量,对于一楼更改代码后的,又再次引用一楼更新前代码的同志处于无分处理!

#17


没遇到过,一起学习!

#18


//去除listbox中的重复项开始
    private void Distinct(ListItemCollection items)
    {
        for (int i = 0; i < items.Count; i++)
        {
            for (int j = items.Count - 1; j < items.Count-i; j++)
            {
                if (items[i].Equals(items[j]))
                    items.Remove(items[j]);
            }

        }
    }

    //去除listbox中的重复项结束
    这样才是正确的 如果j++的话 item[j]就是集合前面的数据  应该先删除集合后面的数据 才正确

#19


//去除listbox中的重复项开始
//刚发错了  是j--
  private void Distinct(ListItemCollection items)
  {
  for (int i = 0; i < items.Count; i++)
  {
  for (int j = items.Count - 1; j < items.Count-i; j--)
  {
  if (items[i].Equals(items[j]))
  items.Remove(items[j]);
  }

  }
  }

  //去除listbox中的重复项结束
  这样才是正确的 如果j++的话 item[j]就是集合前面的数据 应该先删除集合后面的数据 才正确

#20