如何在添加项目时使用哈希表来避免列表视图中的重复条目?

时间:2010-03-09 06:54:24

标签: c# .net listview items redundancy

当项目添加到列表视图中时,避免列表视图中的冗余的方法是什么? 即时通讯使用winforms c#.net .. 我的意思是如何比较listview1中的项目和listview2中的项目,以便在将项目从一个列表视图添加到另一个列表视图时,它无法输入已在目标列表视图中输入的项目。 我能够将一个列表视图中的项目添加到其他列表视图但是它还添加了一个重复的项目也是什么方法来摆脱它.. ???

3 个答案:

答案 0 :(得分:1)

你可以想到:

Hashtable openWith = new Hashtable();
// Add some elements to the hash table. There are no 
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
// The Add method throws an exception if the new key is 
// already in the hash table.
try
{
    openWith.Add("txt", "winword.exe");
}
catch
{
    Console.WriteLine("An element with Key = \"txt\" already exists.");
}
// ContainsKey can be used to test keys before inserting 
// them.
if (!openWith.ContainsKey("ht"))
{
    openWith.Add("ht", "hypertrm.exe");
    Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]);
}

现在要在编辑后遇到问题的变化,你可以这样做:

if(!ListView2.Items.Contains(myListItem))
{
    ListView2.Items.Add(myListItem);
}

您还可以在How to copy the selected items from one listview to another on button click in c#net?

中引用类似的问题

答案 1 :(得分:0)

正如所建议的那样,哈希表是阻止这种冗余的好方法。

答案 2 :(得分:0)

一个dictonary ...任何数组..一个列表都可能,只是循环抛出项目/子项目,将它们添加到“数组”然后循环抛出数组以检查它与自动列表...

以下是我用来删除按钮上的重复项的示例,但您可以轻松更改代码以满足您的需求。

我使用下面的内容在按钮点击中删除列表视图中的“Dups”,我正在搜索子项,您可以编辑代码供自己使用...

使用字典和我写的一个简单的“更新”类。

private void removeDupBtn_Click(object sender, EventArgs e)
    {   

        Dictionary<string, string> dict = new Dictionary<string, string>();

        int num = 0;
        while (num <= listView1.Items.Count)
        {
            if (num == listView1.Items.Count)
            {
                break;
            }

            if (dict.ContainsKey(listView1.Items[num].SubItems[1].Text).Equals(false))
            {
                dict.Add(listView1.Items[num].SubItems[1].Text, ListView1.Items[num].SubItems[0].Text);
            }     

            num++;
        }

        updateList(dict, listView1);

    }

并使用一点updateList()类......

   private void updateList(Dictionary<string, string> dict, ListView list)
    {
        #region Sort
        list.Items.Clear();

        string[] arrays = dict.Keys.ToArray();
        int num = 0;
        while (num <= dict.Count)
        {
            if (num == dict.Count)
            {
                break;
            }

            ListViewItem lvi;
            ListViewItem.ListViewSubItem lvsi;

            lvi = new ListViewItem();
            lvi.Text = dict[arrays[num]].ToString();
            lvi.ImageIndex = 0;
            lvi.Tag = dict[arrays[num]].ToString();

            lvsi = new ListViewItem.ListViewSubItem();
            lvsi.Text = arrays[num];
            lvi.SubItems.Add(lvsi);

            list.Items.Add(lvi);

            list.EndUpdate();

            num++;
        }
        #endregion
    }
祝你好运!