目前我有Color
个对象的列表。每种格式都是RGB
格式,例如,0, 0, 0
将是黑色。
我有兴趣循环浏览此列表并对其进行排序。找出最常出现的颜色和最低的常用颜色。我有一个问题是我如何装箱颜色值?给定一个双精度列表,您可以通过查找其范围,然后将其除以所需的容器数来对值进行分区。不确定如何通过Color
对象实现这一目标。
我目前使用的一段代码使用LINQ:
var cs = new List<Color> {
Color.White,
Color.Black
};
var max = cs.OrderByDescending(x => (0.2125 * x.R) + (0.7154 * x.G) + (0.0721 * x.B)).Last();
它采用我的颜色列表,并找到该列表的“max”值,并输出White
或Black
,具体取决于输出是max还是min。
总而言之,我对.Mode()
方法感兴趣的颜色列表。
答案 0 :(得分:0)
对于计算模式,请尝试ToLookup
并订购:
var ordered = cs.ToLookup(c => c).OrderByDescending(c => c.Count()).First().Key;
<强>更新强>
您也可以创建扩展方法:
public static Color Mode(this IEnumerable<Color> colors)
{
return colors.ToLookup(c => c).OrderByDescending(c => c.Count()).First().Key;
}