4

だから私はフォームで色の辞書を作成しようとしています

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]));

私を助けてくれる人に感謝します!:)

4

4 に答える 4

2

必要なのはDictionary<string, Vector3D>. .NET フレームワークには付属していないと思うので、Vector3D クラス/構造体を自分で作成するのは簡単です。

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} ;
于 2013-07-02T23:53:01.790 に答える
2

用途によっては、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);

の int 値が自動的に計算さColor.Greenれ、値として追加されます。

于 2013-07-02T23:59:56.177 に答える
1

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
于 2013-07-02T23:53:10.080 に答える
0

最終的に私はそれを理解しましたが、私はみんなの助けがなければできなかったでしょう! まず、文字列キーと色の値を使用して辞書を作成します。

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"]; 
于 2013-07-10T15:01:23.727 に答える