创建包含 List 的字典条目
本文关键字:字典 int 包含 List 创建 | 更新日期: 2023-09-27 18:20:44
所以我正在尝试以以下形式创建颜色字典
Dictionary<string,List<int>>
这样:
(colour:colourvals)
例如,如果颜色为红色:
("red":(255,0,0))
我对 c# 很陌生(大约 1 周(,但我有相当多的 python 经验。我试图在 python 中实现的目标如下所示:
col_dict = {"red":(255,0,0),
"blue":(255,0,0),
"green":(255,0,0)}
对于 c#,经过大量的修补,我终于设法制作了一些有用的东西。这是我当前的代码(看起来很混乱(:
colDict = new Dictionary<string, List<int>>();
colDict.Add("red", new List<int> { 200, 40, 40 }.ToList());
colDict.Add("green", new List<int> { 40, 200, 40 }.ToList());
colDict.Add("blue", new List<int> { 40, 40, 200 }.ToList());
首先,有没有更好的方法?
其次,我想使用列表值作为 Color.FromArgb(( 的参数。有没有办法将 colDict 中的列表放入参数中,例如:
Color.FromArgb(colDict["green"]);
还是我必须存储颜色选择,然后像这样输入每个值?
this.col = colDict[colour];
Color.FromArgb(this.col[0],this.col[1],this.col[2]));
非常感谢任何可以帮助我的人! :)
我认为你需要的是一个Dictionary<string, Vector3D>
.自己创建一个 Vector3D 类/结构很容易,因为我认为它没有随 .NET 框架一起提供:
public class Vector3D
{
public int R{get;set;}
public int G{get;set;}
public int B{get;set;}
}
dict["red"] = new Vector3D{R=255,G=0,B=0} ;
根据您的使用情况,您可能会发现将 RGB 颜色存储在单个 int 值中更容易。
public int ColorToInt(byte r, byte g, byte b)
{
return (b << 16) | (g << 8) | r;
}
您可以使用 Color.FromArgb(Int32( 从中获取颜色。因此,您的字典只需要存储<Color, int>
(或者您可以将Color
替换为字符串作为键(
为了节省每次都调用 ColorToInt
方法的时间,可以创建扩展方法。
public static void AddRGB(this Dictionary<Color, int> dict, Color col)
{
int rgbint = (col.B << 16) | (col.G << 8) | col.R;
dict.Add(col, rgbint);
}
因此,每当您想将项目添加到字典中时,都可以执行此操作
Dictionary<Color, int> colDict = new Dictionary<Color, int>();
colDict.AddRGB(Color.Green);
它将自动计算 Color.Green
的 int 值并将其添加为您值。
你不需要ToList,因为它已经是一个列表:
var colDict = new Dictionary<string, List<int>>();
colDict.Add("red", new List<int> { 200, 40, 40 });
colDict.Add("green", new List<int> { 40, 200, 40 });
colDict.Add("blue", new List<int> { 40, 40, 200 });
访问如下值:
colDict["green"][0]
colDict["green"][1]
colDict["green"][2]
Color.FromArgb(colDict["green"][0],colDict["green"][1],colDict["green"][2]));
创建值的另一种方法是使用元组
var colDict = new Dictionary<string, Tuple<int,int,int>>();
colDict.Add("red", new Tuple<int,int,int>(40,45,49));
colDict["red"].Item1
colDict["red"].Item2
colDict["red"].Item3
最后我想通了,但如果没有大家的帮助,我将无法做到这一点!首先使用字符串键和颜色值创建字典:
colDict = new Dictionary<string, Color>();
然后可以像这样添加颜色:
colDict.Add("red", Color.FromArgb(200, 40, 40));
colDict.Add("green", Color.FromArgb(40, 200, 40));
colDict.Add("blue", Color.FromArgb(40, 40, 200));
然后可以引用颜色,并作为"颜色"数据类型轻松访问,如下所示:
colDict["red"];