как использовать хэш-таблицу, чтобы избежать дублирования записей в listview при добавлении в нее элементов?
-
18-09-2019 - |
Вопрос
каков способ избежать избыточности в listview при добавлении в него элементов?.я использую winforms c#.net..я имею в виду, как я могу сравнить элементы в listview1 и элементы в listview2, чтобы при добавлении элементов из одного listview в другой он не мог вводить элементы, которые уже введены в целевом listview..я могу добавлять элементы из одного listview в другой, но он также добавляет повторяющиеся элементы, как можно избавиться от этого ..???
Решение
Вы можете придумать что -то вроде:
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);
}
Вы также можете передать аналогичную проблему в Как скопировать выбранные элементы из одного ListView в другую на кнопке. Нажмите на C#net?
Другие советы
Как уже предлагалось, хэш-таблица - хороший способ предотвратить такую избыточность.
Диктонарный ... любой массив .. Список все возможным, просто цикл бросил элементы/подтоги, добавьте их в «массив», затем петля бросил массив, чтобы проверить его по списку othr ...
Вот пример, который я использую для удаления Dups на ButtonClick, но вы можете легко перейти на код в соответствии с вашими потребностями.
Я использовал ниже, чтобы удалить «dups» в списке обзора на кнопке нажмите, я ищу Subitem, вы можете редактировать код для вашего собственного использования ...
Использует словарь и немного легкий класс «Обновление», который я написал.
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
}
Удачи!