【发布时间】:2014-04-10 18:38:24
【问题描述】:
为了构建一个堆树,我使用了 SortedDictionay 并将其命名为“堆”。在第一个节点(键)上进行一些处理后,我想删除(删除)第一个键,所以我使用“heap.Remove(heap.Keys.First());”。它运行但没有任何变化!这意味着第一个节点仍然存在。
这是Task类:
public class Task : IComparable<Task>
{
public int d_ij = 0;
public List<slice> slices = new List<slice>();
public class slice
{
public int slice_id = 0;
public float start = 0;
public float end = 0;
public float speed = 0;
}
#region IComparable<Task> Members
public int CompareTo(Task other)
{
if (this.slices[0].start > other.slices[0].start) return 1;
else return -1;
}
#endregion
}
这是主函数(在 Program.cs 类中)
static void Main(string[] args)
{
int Sid = 1;
int Preid = 0;
string LINE = "";
string[] tmp_line;
string[] tmp_tmp_line;
SortedDictionary<Task, float> heap = new SortedDictionary<Task, float>();
Stream Tsk_info;
Tsk_info = File.OpenRead(@"F:\...\info.txt");
StreamReader TSK_INF = new StreamReader(Tsk_info);
while (TSK_INF.EndOfStream == false)
{
LINE = TSK_INF.ReadLine();
tmp_line = LINE.Split(' ');
Task newtask = new Task();
newtask.d_ij = Int16.Parse(tmp_line[0]);
while (Sid < (tmp_line.Length)/2)
{
tmp_tmp_line = tmp_line[2 * Sid].Split('(', ')', ',');
newtask.slices.Add(new Task.slice()
{
slice_id = Sid,
start = float.Parse(tmp_tmp_line[1]),
end = float.Parse(tmp_tmp_line[2]),
speed = float.Parse(tmp_line[Sid + Preid])
});
Preid = Sid;
Sid++;
}
Sid = 1;
Preid = 0;
heap.Add(newtask, newtask.slices[0].start);
}
///////THE PROBLEM IS HERE I CANNOT REMOVE FROM MY SORTED DICTIONARY
bool u = heap.Remove(heap.First().Key);
}
【问题讨论】:
-
Remove返回什么?根据您的描述,这听起来应该可行 - 您可以发布您的代码吗? -
它只是运行并继续......当我在“heap.remove(...)”之后检查时,堆仍然和以前一样......
-
为什么把我的代码放在这里这么难……每次都变得乱七八糟,没有足够的空间……
-
顺便说一句,删除返回 false!请帮助我..我坚持了很长时间..没有结果!
-
您可能需要为排序字典实现IEquatable 以比较两个对象是否相等。
标签: c# sorting dictionary