#c# #list #byte
Вопрос:
Я пытаюсь выполнить поиск по списку, содержащему структуру:
struct Item
{
public string Name;
public Byte[] Data;
}
static List<Item> Items = new List<item>();
Каждый раз, когда я получаю данные, байты меняются и их необходимо обновлять. Есть ли способ поиска элемента, который необходимо обновить, без каждого цикла?
Кроме того, база данных слишком медленная для этого — это должно происходить в памяти (список не должен превышать 1 МБ).
Спасибо
Комментарии:
1. Было бы приемлемо использовать a
Dictionary<string, Byte[]>
вместо списка struct ? Тогда поиски были быO(1)
.2. Если удалено следующим образом: Словарь<строка, байт[]> Элементы = новый словарь<строка, байт[]><строка, байт[]>(); можно ли обновлять такие элементы? Элементы[«уникальный код»] = новые байты; ?
3. Да, это верно. Если ключ не существует, создается новая запись с указанным значением, и если ключ уже существует, существующее значение обновляется новым. Это очень быстро.
4. Проверено — отлично!
Ответ №1:
Пошел со словарем, как предложил Мэтью Уотсон в первом ответе.
static Dictionary<string, Byte[]> Items = new Dictionary<string, Byte[]>();
И обновление списка с помощью
Items[currentItem] = GetByteFromData(data);
//and
Items.Remove(currentItem);
Спасибо всем
Ответ №2:
Линк?
var targetItem = предметы.Сначала ( x => x.Name == Целевое значение);
Хотя не уверен, что это быстрее, чем foreach. Может быть интересно, что, если только это не изменилось в последнее время, циклы for работают быстрее, чем циклы foreach.
Комментарии:
1. Здесь следует выбрать значение FirstOrDefault в случае отсутствия значения targetValue. В любом случае foreach просто скрыт и выполняется внутри кода Linq. Для выступлений лучше сменить хранилище на словарь
2. Да, словарь лучше — я написал это до того, как увидел это предложение.