Как использовать хеш-таблицу, чтобы избежать дублирования записей в списке, когда элементы добавляются в него? - PullRequest
1 голос
/ 09 марта 2010

Как избежать избыточности в просмотре списка при добавлении к нему элементов? я использую winforms c # .net .. я имею в виду, как я могу сравнить элементы в listview1 и элементы в listview2, чтобы при добавлении элементов из одного списка в другой он не мог вводить элементы, уже введенные в целевой список. я могу добавлять элементы из одного списка в другой, но он добавляет дубликаты и способ избавиться от него .. ???

Ответы [ 3 ]

1 голос
/ 09 марта 2010

Вы можете придумать что-то вроде:

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);
}

Вы также можете обратиться к аналогичной проблеме в Как скопировать выбранные элементы из одного списка в другое по нажатию кнопки в c # net?

0 голосов
/ 24 августа 2011

Диктофон ... Любой массив ... список всех возможных, просто закинуть элементы / подэлементы цикла, добавить их в "массив", а затем закинуть массив, чтобы проверить его в другом списке ...

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

Я использовал нижеприведенное, чтобы удалить «Dups» в просмотре списка одним нажатием кнопки, я ищу подраздел, в котором вы можете редактировать код для собственного использования ...

использует словарь и небольшой простой класс "update", который я написал.

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
    }

Удачи!

0 голосов
/ 09 марта 2010

Как и предполагалось, хеш-таблица является хорошим способом предотвращения такой избыточности.

...