【问题标题】:Searching a ListBox with duplicates搜索具有重复项的 ListBox
【发布时间】:2014-03-28 19:58:10
【问题描述】:

我有一个 ListBox,每次客户端向服务器发送消息时都会添加文本。

我也想搜索 ListBox 以查找重复项并输出消息。

例如如果ListBox如下:

Cat
Dog
Rat

什么都不应该发生。

但是如果ListBox如下:

Cat
Cat
Dog

我希望它清除或输出一条消息。

有什么想法吗? 谢谢

【问题讨论】:

  • 可能不是最有效的方法,但您可以创建一个方法,将列表框中的每个项目添加到数组列表中,但在将每个项目输入到数组列表之前检查该项目是否已经存在于所述数组列表中

标签: c# listbox


【解决方案1】:

这里有一个简单的实现来帮助您入门:

for (int i = 0; i < listBox1.Items.Count; i++)
        {
            for (int j = i + 1; j < listBox1.Items.Count; j++)
            {
                if (listBox1.Items[i].ToString() == listBox1.Items[j].ToString())
                {
                    Console.WriteLine("Duplicate {0}:{1}", listBox1.Items[i].ToString(), listBox1.Items[j].ToString());
                }
            }
        }

从您的示例列表框项目中,上述代码的输出将产生:

"Duplicate Cat:Cat"

【讨论】:

  • 感谢大家的帮助,但这个对我来说非常有效。
【解决方案2】:

你可以切换到HashSet吗?

所以你把所有的东西都放在HashSet中,然后你把所有的元素都放在ListBox中。

HashSet<String> hashSet = new HashSet<String>();

HashSet 总是包含唯一的元素。

如果我这样做:

hashSet.Add("Hello");
hashSet.Add("Hello");

hashSet 将只包含一次“Hello”。

【讨论】:

    【解决方案3】:

    你可以这样做吗?

    var duplicates = myListBox.Items.Cast<string>().Where(i => i.Count() > 1);
    if (duplicates.Any()) 
       // Duplicates
       Console.WriteLine("Alert !"); 
    else 
       myListBox.Items.Add(myString);
    

    【讨论】:

    • 你可以使用:myListBox.Items.Cast().Where(i => i.Count() > 1);
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2018-12-04
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多