我的想法是,我有一个根据红色值进行排序的排序机制(后来我想以此为基础,因此我也可以按绿色和蓝色值进行排序)。我在实现这种排序机制时遇到了麻烦。
我有一个名为类Colorbox
基本上是一个List<Color>
,但这样一来我可以把List<Color>
一个List<Colorbox>
。
我的平均目标是可以Colorbox
根据1种颜色(红色,蓝色,绿色)的值进行订购。(例如,使列表中最左边的值具有最少的红色)。
我尝试实现toCompare
重写(不知道这在C#中是否有效,但我知道在Java中,当您调用sort()
方法时也会调用compare )。
这给了我如下代码:
public int CompareTo(object obj) {
Color toCompare = (Color) obj;
if (this.CompareTo(toCompare) == 1)
{
return 1;
}
else
{
return 0;
}
}
但我看不到如何在这里实现按颜色排序或一般的排序。我是否需要写多余的东西sort()
来覆盖原始文件?
我真的不知道这种排序代码应该做什么。它会按值排序,直到可以遍历列表并且什么都没有改变吗?还是对这个想法来说太长了?
在下面,我给出了该类的一般代码:
internal class Colorbox
{
private List<Color> box = new List<Color>();
int colorPicker = 0;
public Colorbox(List<Color> colorList)
{
this.box = colorList;
}
}
我希望有人可以帮助解释我应该做什么或应该朝哪个方向解决这个问题。
已经非常感谢,并询问我是否不清楚。
我相信您希望IComparer<T>
界面比较您的Color
类型。这是使用LinqPad的示例。该RedColorComparer
实现将根据颜色的降序对您的颜色进行排序,这听起来像您想要的。注意将其与Array.Sort
行一起使用。
void Main()
{
var colors = new Color[] { Color.Red, Color.Blue, Color.Gray };
Array.Sort(colors, new RedColorComparer());
colors.Dump();
}
public class RedColorComparer : IComparer<Color>
{
public int Compare(Color a, Color b)
{
if (a.R < b.R)
return 1;
else if (a.R == b.R)
return 0;
else
return -1;
}
}
结果是这样的:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句