我有一个图层的集合,他们有名字和颜色.我想做的是先根据颜色进行排序,然后根据他们的名字:
class Layer { public string Name {get; set;} public LayerColor Color {get; set;} } enum LayerColor { Red,Blue,Green }
喜欢:
(red) layer2 (red) layer7 (blue) layer0 (blue) layer3 ...
我正在查看SortedList,但它的行为就像一个Dictionary,所以不允许重复的项目.
另外我正在使用一个API,我通过创建顺序获取了图层列表,所以我需要获得完整的图层列表来按照我想要的方式进行排序.
最终,图层列表将被绑定到一个WPF用户界面,用户将可以添加新的图层,这就是为什么我希望内部列表总是被排序,因为性能不重要(层数少于一千).
最后,我排序的图层将通过以下方式访问:
class Image { public MySortedList<Layer> Layers {get; set;} }
最好的方式是做什么?
解决方法
你有搜索吗?
Generic SortedList和
SortedList.
所以我错过了重复的部分,这使我有点难以同意.但这里是我如何解决它:
var sortedList = new SortedList<LayerColor,SortedList<Layer,Layer>>(); var redSortedList = new SortedList<Layer,Layer>(); // Add all layers associated with the color red sortedList.Add(LayerColor.Red,redSortedList);
会为你工作吗此外,我更喜欢使用linq,但如果你真的想要一个排序列表,我的解决方案将很有可能工作.
最后尝试:):
public class YourClass { private List<Layer> _layers; public List<Layer> Layers { get { _layers = _layers.OrderBy(y => y.LayerColor).ThenBy(y => y.Name).ToList(); return _layers; } set { _layers = value; } } }
请注意,我直接在浏览器中编写,而不是在VS中进行测试(坐在OS X上),但是您可能会得出结论.