Мне нужен очень специфический класс, мне бы очень хотелось узнать, существует ли такой класс, поэтому мне не нужно его повторно реализовывать.У меня есть набор предметов.Каждый элемент имеет числовое значение, связанное с ним - вес .Вес каждого предмета уникален в пределах набора.Товары должны быть отсортированы по весу.Вес можно изменить для каждого предмета, но операция по изменению веса является чрезвычайно дорогой.Существует операция, которая выполняется на множестве часто - перемещать диапазон предметов в наборе, изменяя вес предмета.Поэтому мне нужен класс типа List, но со встроенной логикой для управления весом элементов.Последовательность веса должна быть разреженной, чтобы минимизировать столкновения с весом при операциях перемещения и улучшить производительность, сводя к минимуму операции по изменению весаИнтерфейс класса должен выглядеть так:
public abstract class SparsedSequence<T> : IList<T>
{
// Weight increment for new items.
private int WeightIncrement = 10000;
protected abstract void OnWeightChanged(int weight, T item);
public void MoveRange(int offset, int count, int amount)
{
// There must be fancy weight management logic.
}
public void MoveRange(T[] range, int amount)
{
// Cut T[] to set of calls to MoveRange(int, int, int)
}
public int ConstraintAmount(int offset, int count, int amount)
{
// Returns amount constrainded by sequence size and 0,
// so that moved block will remain within proper range.
// If returns 0 - block unmovable in that direcion.
}
public int ConstraintAmount(T[] range, int amount)
{
// ----- " -----
}
public void Add(T newItem)
{
// Add to sequnce end.
// Defines new weight and calls OnWeightChanged.
// NewWeight = Weights[Count - 1] + WeightIncrement.
}
public void Add(T item, int weight)
{
// Adds item with forced weight.
}
public T this[int index]
{
// Get item
get { ... }
}
public IList<int> Weights
{
// Get items weights
get { ... }
}
public KeyValuePair<int, T> this[int index]
{
// Get item and weight
get { ... }
}
// Remove, clear, insert, indexof etc.
}
Не найдено ничего похожего в framework или PowerCollections.Я полагаю, вы уже поняли, что я собираюсь использовать этот класс для управления упорядоченными операциями набора записей в базе данных :) Спасибо.