创建包含 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]));

非常感谢任何可以帮助我的人! :)

创建包含 List<int> 的字典条目

我认为你需要的是一个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"];