字典与优先事项

alb*_*ert 4 c# algorithm dictionary

我有一个类Item和一个Items字典.字典中的每个项目都具有唯一的优先级(1到N).当我从字典中删除项目时,所有其他优先级都会更新.我想在字典中实现一些增加/减少优先级.如果我想增加单个项目的优先级,我将优先级与下一个较低项目交换.问题是增加一系列项目的优先级

public class Item
{
    public string key;
    public string data;
    public int Priority;
}

Dictionary<string, Item> allItems = new Dictionary<string, Item>();

public void AddToQueue(Item item)
{
    item.Priority = allItems.Count + 1;
    allItems[item.key] = item;
}

public void PriorityUp(Item it)
{
    if(it.Priority <= 1)
        return;

    it.Priority--;

    foreach(var item in allItems )
        if(item.Value.Priority == it.Priority)
        {
            item.Value.Priority++;
            break;
        }
}

public void PriorityUp(IEnumerable<Item> items)
{
    //TODO
}
Run Code Online (Sandbox Code Playgroud)

我有字典,以便有效地找到一个项目.提高某些项目的优先级必须对其他项目的优先级进行一些改变

更清楚:我有N个项目的集合(列表,数组,字典...)我选择了字典,因为我还必须做一些其他的操作.每个项目都有一个字段优先级,其中一些唯一值1 <= P <= N.

当我选择一些并增加/减少P时,我想找到所有项目的结果优先级(1到N).

Ian*_*Ian 5

为什么不使用OrderedDictionary呢?然后字典中的顺序可以是您的优先级,如果您需要交换优先级,您可以只交换项目.但它确实意味着如果您添加/删除/插入它将只为您处理优先级.

这种方法可以提高优先级,可以调用RemoveAt(oldPriority)和Insert(newPriority).