2

属性の値によってデータをリストに分割し、リストのアイテム間のすべての組み合わせオプションをチェックしたいと考えています。私の問題は、取得するリストの数がわからないことと、この方法以外にそれを行うためのより良い方法があるかどうかです。

var a = Data.Descendants("value").Where(x => x.Attribute("v").Value == "1").ToList(); var b = Data.Descendants("value").Where(x => x.Attribute("v").Value == "2").ToList(); var c = Data.Descendants("value").Where(x => x.Attribute("v").Value == "3").ToList();

foreach (a の var tempA) { foreach (b の var tempB) { foreach (c の var tempC) { 何かを行います。} } }

var items = new List<string>{"1","1","2","3","2","1","3","3","2"}編集: 1 つのデータ ソース ( )からアイテムをチェックしたい

ここで、このリストを 3 つのリストに分割したいと思います ( list a = "1","1","1" - list b = "2","2","2" - list c = "3","3","3")

このステップで私がやろうとしているのは、あるリストの 1 つのアイテムから他のリストの他のアイテムまでのすべての組み合わせをチェックすることです。

a[0] with b[0] c[0]
a[0] with b[0] c[1]
a[0] with b[0] c[2]
a[0] with b[1] c[0]
.
.
b[1] with a[2] c[2]
.
.

ありがとう!

4

3 に答える 3

0

LINQ の GroupBy メソッドを使ってみませんか? いくつかの例を次に示します。

LINQ GroupBy の例

于 2013-06-19T13:31:26.937 に答える
0

GroupBy要素をグループ化するために使用できます。次に、Linq を使用して組み合わせを作成できます。

var grouping = Data.Descendants("value")
                   .GroupBy(x => x.Attribute("v").Value);

var combinations grouping.SelectMany(x =>
                              grouping.Select(y =>
                                  new { Group = x, Combination = y }));

foreach(var c in combinations)
{
    //Do Something
}

例えば

public class Pair
{
    public string A { get; set; }
    public string B { get; set; }
}

var pairs = new List<Pair>();
pairs.Add(new Pair { A = "1", B = "2" });
pairs.Add(new Pair { A = "1", B = "3" });
pairs.Add(new Pair { A = "1", B = "4" });
pairs.Add(new Pair { A = "2", B = "1" });
pairs.Add(new Pair { A = "2", B = "2" });
pairs.Add(new Pair { A = "2", B = "3" });

var grouping = pairs.GroupBy(x => x.A);

var combinations = grouping.SelectMany(x =>
                                grouping.Select(y =>
                                    new { Group = x, Combination = y }));

グルーピング結果

于 2013-06-19T13:39:10.967 に答える