[英]Easy way to combine two lists into a lookup KVP that maps between the two lists
我有两个清单,可以说
OtherColors = Color[]
{
Color.FromRgb(1,0,0),
Color.FromRgb(0,0,1),
Color.FromRgb(1,0,15),
};
Colors = Color[]
{
Color.FromRgb(1,4,4),
Color.FromRgb(5,6,66),
Color.FromRgb(4,5,7),
Color.FromRgb(7,5,8),
Color.FromRgb(2,9,2),
Color.FromRgb(4,2,190),
Color.FromRgb(5,5,2),
Color.FromRgb(180,5,7),
Color.FromRgb(5,9,171),
};
将它们组合成用作查找表的字典的最快/最简单的方法是什么,以便短列表中的每个项目都重复三次作为值,而长列表中的每个项目只是作为键插入相同的位置是否在较长列表中?
最终看起来像
ColorLookup = new Dictionary<Color, Color>
{
{Color.FromRgb(1,4,4), Color.FromRgb(1,0,0)},
{Color.FromRgb(5,6,66), Color.FromRgb(1,0,0)},
{Color.FromRgb(4,5,7), Color.FromRgb(1,0,0)},
{Color.FromRgb(7,5,8), Color.FromRgb(0,0,1)},
{Color.FromRgb(2,9,2), Color.FromRgb(0,0,1)},
{Color.FromRgb(4,2,190),Color.FromRgb(0,0,1)},
{Color.FromRgb(5,5,2), Color.FromRgb(1,0,15)},
{Color.FromRgb(180,5,7),Color.FromRgb(1,0,15)},
{Color.FromRgb(5,9,171),Color.FromRgb(1,0,15)},
};
我知道这很简单,但我对此感到空白...
您不会比简单循环快得多。 最简单的方法可以争论,但是我更喜欢linq-solutions。
var ColorLookup = Colors.Select((c,i) => new { Key = c, Value = OtherColors[i / OtherColors.Length]}).ToDictionary(v => v.Key, v=> v.Value);
只要这些列表保持原样,它就不会像您希望的那样酷,但是它可以工作:
var output = new Dictionary<Color, Color>();
for (int i = 0; i < colors.Length; i++)
{
output.Add(colors[i], otherColors[(int)Math.Floor(i / 3M)]);
}
您可以将其参数化以处理不同大小的列表并进行一些边界检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.