我需要非常具体的课程,我真的很想知道是否存在一个,所以我不必重新实现它。我有一套物品。每个项目都有一个与其重量相关的数值。每个项目的重量在集合内是唯一的。物品必须按重量分类。可以为每个项目修改权重,但是更改权重的操作非常昂贵。有一个操作,它经常在集合上执行 - 通过修改项目的重量来移动集合内的项目范围。所以我需要一个 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.
}
在框架或 PowerCollections 中没有发现任何类似的东西。我猜你已经知道我打算使用这个类来管理数据库有序记录集操作:) 谢谢。