C#排序有序字典
我正在使用有序字典(因为它是数据结构,使我能够通过键和索引访问项。) 我正在尝试使用气泡排序对其进行排序 (特别是因为将调用此函数的某些遗留代码仅使用一个方法定义了comparator,即一个元素如何小于另一个元素。 ILzObjectComparator_Less(ByVal首先作为对象_ ByVal(第二个作为对象)作为布尔值) ) 当我的代码工作时,也就是说,它是按值排序的,它是在改变键值映射 这是我的方法-C#排序有序字典,c#,.net,sorting,collections,ordereddictionary,C#,.net,Sorting,Collections,Ordereddictionary,我正在使用有序字典(因为它是数据结构,使我能够通过键和索引访问项。) 我正在尝试使用气泡排序对其进行排序 (特别是因为将调用此函数的某些遗留代码仅使用一个方法定义了comparator,即一个元素如何小于另一个元素。 ILzObjectComparator_Less(ByVal首先作为对象_ ByVal(第二个作为对象)作为布尔值) ) 当我的代码工作时,也就是说,它是按值排序的,它是在改变键值映射 这是我的方法- public void SortUsingComparer(LzColl
public void SortUsingComparer(LzCollections.ILzObjectComparator Comparator)
{
for (int j = 0; j < od.Count; j++)
{
for (int i = 0; i < od.Count - 1; i++)
{
if(Comparator.Less( od[i+1],od[i]))
{
temp = od[i + 1];
od[i + 1] = od[i];
od[i] = temp;
}
}
}
}
public void sortusingcomarator(LzCollections.ILzObjectComparator Comparator)
{
对于(int j=0;j
有一个,但使用了OrderBy,我无法与我们的遗留代码使用的ILzObjectComparator进行映射。)
非常感谢您的帮助。您引用的不是
词典中的元素
,而是它们的值
:od[i]
您可以尝试改用元素
:od.ElementAt(i)
,但这不允许您为其分配任何内容,也不能执行InsertAt()
请注意,我甚至不确定字典中的顺序是否得到保证
所以,我认为你做不到
但是,当然,还有课堂
但由于您需要使用自定义比较器,我想您必须切换到另一个集合类,可能是List
这里有一个例子
List<Tuple<int, int>> od = new List<Tuple<int,int>>();
List od=new List();
添加几个元素后,可以按以下任一项对其进行排序:
for (int j = 0; j < od.Count; j++)
{
for (int i = 0; i < od.Count - 1; i++)
{
// insert your custom comparer here:
if (od.ElementAt(i + 1).Item1 < od.ElementAt(i).Item1)
{
var temp0 = od.ElementAt(i);
var temp1 = od.ElementAt(i + 1);
od.RemoveAt(i);
od.RemoveAt(i);
od.Insert(i, temp1);
od.Insert(i+1, temp0);
}
}
}
for(int j=0;j
当然,元组
不如字典
有用,例如唯一性等。您是否考虑过使用.NET内置的支持来使用自己的排序?您是否解决了问题?您使用的是哪个有序字典类?那么什么是od
?您能显示您的数据结构吗?这是没有用的,因为当您使用字典时,您可以进行键查找并拥有唯一的条目,而使用列表会变得效率低下。键查找与排序/比较有什么关系我认为这个问题本身没有多大意义。创建OrderedDixtionary时,他应该使用cusotm比较器。不知道他想用泡泡排序实现什么。。