-1

リスト内にいくつかの 3D データがあります。

myDataList[0] - { X: 164 , Y: 79 , Z: 120 }
myDataList[1] - { X: 146 , Y: 63 , Z: 120 }
myDataList[2] - { X: 192 , Y: 59 , Z: 120 }
myDataList[3] - { X: 196 , Y: 59 , Z: 120 }
myDataList[4] - { X: 110 , Y: 55 , Z: 120 }
myDataList[5] - { X: 148 , Y: 69 , Z: 122 }
myDataList[6] - { X: 194 , Y: 59 , Z: 122 }
myDataList[7] - { X:  18 , Y: 47 , Z: 122 }

同じZ座標からX座標とY座標を取得したい

ループを使用してLINQの方法でこれを実行しようとしています。

for (int i = 0; i < myDataList.Count; i++)
{
    myXList = myDataList.Where(x => myDataList[i].Z == myDataList[i + 1]).Select(x => x.X).ToList();

    myYList = myDataList.Where(y => myDataList[i].Z == myDataList[i + 1]).Select(y => y.Y).ToList();
}

しかし、私の問題は、リストから同じ Z を区別し、X と Y を選択する方法です。上記のループは、異なる Z をandforだけでチェックしているだけなので、間違っています。ii + 1

救いの手はあり​​ますか?

4

2 に答える 2

2

何かのようなもの:

var grouped = from p in myDataList
              group p by p.Z into q
              select q;

// Or, equivalent considering you don't have to reuse q
var grouped2 = from p in myDataList
               group p by p.Z;

// Or, equivalent using functional LINQ
var grouped3 = myDataList.GroupBy(p => p.Z);

foreach (var group in grouped)
{
    int z = group.Key;

    foreach (var element in group)
    {
        // Where element is the "original" object
        int x = element.X;
        int y = element.Y;
        int z2 = element.Z; // same as z
    }
}

.ToLookup技術的には、に似た方法さえありますGroupBy

var grouped4 = myDataList.ToLookup(p => p.Z);

結果のグループは、 によって生成されたものと同様に使用されます.GroupBy。違いは微妙です... https://stackoverflow.com/a/1337567/613130

于 2013-08-09T09:35:11.093 に答える