1

以下のようにクラスから返されたデータのコレクションがあります

item[0].value, item[1].value, item[2].value

value値に基づいて 3 つの個別の配列に入れたいと思います。

例:

item[0].value = red
item[1].value = blue
item[2].value = green
item[3].value = red
item[4].value = red
item[5].value = blue

Array red = { item[0], item[3], item[4] }
Array blue = { item[1], item[5] }
Array green = { item[2] }

C#でこれを行うにはどうすればよいですか?

EDITED (私はC#が初めてなので、それらを表現する方法が本当にわかりません、申し訳ありません)

私が受け取る正しいコレクションは以下のようになります

item.value[0].color = red
item.value[0].color = blue
item.value[0].color = green
item.value[0].color = red
item.value[0].color = red
item.value[0].color = blue

上記をその値item.value[x]に基づいてグループ化したいと思います。color

お気に入り:

Group Red will have item.value[0], item.value[3], item.value[4]
Group blue will have item.value[1], item.value[5]

等々。

実験:

int[] colors = { item.value[0].value, item.value[1].value, item.value[2].value };

int[] Red = colors.Where(c => c == "Red").ToArray();

これは を返しますが、赤を返した は返しRed Arrayません。item.value[0]Red Array には、それぞれitem.value[x]に Red が含まれているものが必要です。

4

5 に答える 5

3

LINQ はトリックを行う必要があります。

var groups = item.GroupBy(x => x).Select(color => color.ToList()).ToList();

以下を返します。
ここに画像の説明を入力

于 2013-11-09T19:08:48.800 に答える
1

Linq を使用すると、これを非常に簡単に行うことができます

List<Color> colors = new List<Color>{Color.Red, Color.Red, Color.Blue, Colour.Green};
Color[] red = colors.Where(c => c == Color.Red).ToArray();
Color[] blue = colors.Where(c => c == Color.Blue).ToArray();
Color[] green = colors.Where(c => c == Color.Green).ToArray();

データ構造が であってもArray、Linq は同じままです。

ここにMSDNのドキュメントがありますWhere()

Enumerable.Where

于 2013-11-09T19:06:59.567 に答える
1

いくつかの場所で構文が間違っています。.Value配列に割り当てる必要はありません..文字列の周りの引用符を忘れました。

このようにしてください。

        string[] item = new string[6];
        item[0] = "red";
        item[1] = "blue";
        item[2]= "green";
        item[3] = "red";
        item[4]= "red";
        item[5] = "blue";

linqを使用して新しい配列を作成できます

 string[] redArray = item.Where(c => c == "red").ToArray();

item文字列ではなく、プロパティがある場合.Value、linq は次のようになります。

item[] redArray = item.Where(c => c.Value == "red").ToArray();

あなたの実験に基づいて、これを検討してください

int[] colors = { item.value[0], item.value[1], item.value[2] };

var Red = colors.Where(c => c.value == "Red").ToArray();

Red単なる赤色の配列ではなく、元のデータ型の配列はどこにありますか。

于 2013-11-09T19:11:35.027 に答える
1

色の列挙型を定義するだけで、linq クエリを使用するだけでそれを行うことができます。

        private void button1_Click(object sender, EventArgs e)
        {
            List<Color> item = new List<Color>();

            item.Add(Color.blue);
            item.Add(Color.red);
            item.Add(Color.blue);
            item.Add(Color.red);
            item.Add(Color.red);
            item.Add(Color.green);

            List<Color> red = item.Where(x => x.Equals(Color.red)).ToList();
            List<Color> blue = item.Where(x => x.Equals(Color.blue)).ToList();
            List<Color> green = item.Where(x => x.Equals(Color.green)).ToList();
        }
        enum Color
        {
           red,
           blue,
           green
        }
于 2013-11-09T20:33:26.670 に答える