C#可排序集合,允许重复的键
|
我正在编写一个程序来设置顺序,在该顺序中各种对象将出现在报表中。
序列是Excel电子表格上的Y位置(单元格)。
下面是代码的演示部分。
我想要完成的是拥有一个集合,这将允许我添加多个对象,并且我可以基于序列获得排序的集合
SortedList list = new SortedList();
Header h = new Header();
h.XPos = 1;
h.name = \"Header_1\";
list.Add(h.XPos, h);
h = new Header();
h.XPos = 1;
h.name = \"Header_2\";
list.Add(h.XPos, h);
我知道SortedList不允许这样做,我一直在寻找替代项。我不想消除重复项,而已经尝试过List<KeyValuePair<int, object>>
。
谢谢。
没有找到相关结果
已邀请:
14 个回复
丧泉缝锋
实例化新的SortedList,SortedDictionary等时,将使用它:
int是可以重复的键。
降女陷费券
广躺椽
我的测试用例:
输出:
到街客核
,它接受
类,然后以这种方式实现Compare方法:
皇小福另届
的值不应为
,而应为
。这是一个简单而小的更改,但是它可以解决所有问题,并且避免像其他建议的解决方案一样产生新问题(请参见下面的说明):
请注意,添加一个“有趣的”键,例如添加一个随机数或假装2个具有相同值的XPos是不同的,这会导致许多其他问题。例如,很难或什至不可能删除特定的标题。 还要注意,如果只需要排序几个
,而不是每个
,则排序性能会好得多。示例:如果有100个XPos,并且每个都有100个标头,则需要排序10000
,而不是100
。 当然,该解决方案也有一个缺点:如果有很多XPos只有1个标头,则需要创建许多列表,这会产生一些开销。
烷刨画颠离
http://msdn.microsoft.com/en-us/library/bb460184.aspx
搜洼挂时
因此,该类应该保留在这些对象上,并且每个对象的PosX都作为int Position
最终我得到的是排序后的“序列”列表。
嗓瑰
考试班
标记结构
Lambda比较器助手
恋卡
的类,该类保持相等性和哈希值,但是如果不相等,则永远不会与0进行比较。这是可以做到的,并且可以带来一些好处-稳定的排序(也就是说,首先添加到排序列表中的值将保持其位置),而
可以简单地返回实际的字符串值。 这是应该完成此操作的struct键:
豹芜澈
死狸蔽垂藐
惜堡沁戚
然后您可以编写:
高温超导
澳绍能
栖很钾是狠
进行这项工作的实用工具是 比较器需要一个lambda
标记结构