从3D矢量列表中从同一z中选择x和y的LINQ方法是什么
本文关键字:是什么 方法 LINQ 3D 列表 选择 | 更新日期: 2023-09-27 18:26:54
我在一个列表中有一些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。上面的for
循环是错误的,因为它只是检查i
和i + 1
的不同Z,而不是同时检查所有的i。
有人帮忙吗?
类似于:
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
}
}
从技术上讲,甚至还有类似于GroupBy
的.ToLookup
方法
var grouped4 = myDataList.ToLookup(p => p.Z);
所得到的组与.GroupBy
生成的组类似地被使用。差异是微妙的。。。https://stackoverflow.com/a/1337567/613130
var coordinates = new List<Coordinate>()
{
new Coordinate { X = 164 , Y = 79 , Z = 120 },
new Coordinate { X = 146 , Y = 63 , Z = 120 },
new Coordinate { X = 192 , Y = 59 , Z = 120 },
new Coordinate { X = 196 , Y = 59 , Z = 120 },
new Coordinate { X = 110 , Y = 55 , Z = 120 },
new Coordinate { X = 148 , Y = 69 , Z = 122 },
new Coordinate { X = 194 , Y = 59 , Z = 122 },
new Coordinate { X = 18 , Y = 47 , Z = 122 }
};
var grouped = coordinates
.Select(c => c.Z)
.Distinct()
.ToDictionary(
z => z,
z => coordinates.Where(c => c.Z == z));