У нас есть приложение на основе C# Windows Forms, где есть панель (для контактов), которая содержит несколько элементов управления (таких как имя, идентификатор, телефон и т. Д.) Под ним. Мы добавили текстовый поиск (с именем, идентификатором, телефоном и т. Д.), Чтобы отобразить любое подходящее управление контактами путем циклического (для цикла) через каждый элемент управления.Самый быстрый способ найти контроль соответствия текста в коллекции управления
Это хорошо работает, но если у нас больше контактов (скажем, более 100 и более 100 панелей), это занимает больше времени. Есть ли альтернативный подход для ускорения поиска в этом случае?
EDIT:
Вот код ниже
Filter(Control Pls, string search)
{
foreach (Control ctrl in Pls.Controls)
{
var Name = ctrl.Controls.Find("name", true);
if ((Name != null) && (Name.Length != 0))
{
Label n = (Label)Name[0];
contactName = n.Text;
}
var Extn = ctrl.Controls.Find("extn", true);
if ((Extn != null) && (Extn.Length != 0))
{
Label e = (Label)Extn[0];
contactExtn = e.Text;
} if (contactName != null && contactExtn != null)
{
if (contactName.Contains(search) || contactExtn.Contains(search))
{
ctrl.Show();
}
else
{
ctrl.Hide();
}
}
else
{
ctrl.Hide();
}
}
}
Если вы получаете соответствующее значение, то разрывайте его в петле, и для поиска вы можете использовать метод упругого поиска, который содержит концепцию индексирования, что, безусловно, ускоряет поиск. –
Я не могу вырваться из цикла, так как мне пришлось отображать все соответствующие контакты. – rajkumaradass
Вы пробовали linq? –