C# 如何实施“;模板”;使用linq的模式?
我有一个带有x,y,z坐标和“值”的点列表,比如int。我想选择一个新的枚举,以便每个值都等于'value+value[up]+…+值[down]”这样一个模具,仅当其存在时才使用所有周围的值。如何使用linq制作这样的模具图案?如何,创建一个方法来说明两个值是否相邻:C# 如何实施“;模板”;使用linq的模式?,c#,linq,C#,Linq,我有一个带有x,y,z坐标和“值”的点列表,比如int。我想选择一个新的枚举,以便每个值都等于'value+value[up]+…+值[down]”这样一个模具,仅当其存在时才使用所有周围的值。如何使用linq制作这样的模具图案?如何,创建一个方法来说明两个值是否相邻: public class Class1 { public int x; public int y; public int z; public int myValue; public st
public class Class1
{
public int x;
public int y;
public int z;
public int myValue;
public static bool IsNeighbour(Class1 c1, Class1 c2)
{
bool ret = ((Math.Abs(c1.x - c2.x) == 1) && c1.y == c2.y && c1.z == c2.z) ||
((Math.Abs(c1.y - c2.y) == 1) && c1.x == c2.x && c1.z == c2.z) ||
((Math.Abs(c1.z - c2.z) == 1) && c1.y == c2.y && c1.x == c2.x);
return ret;
}
}
然后,你可以打电话:
//lc is a List<Class1>;
var result = lc.Select(currItem =>
lc.Where(anItem =>
Class1.IsNeighbour(currItem, anItem)).Sum(item => item.myValue) + currItem.myValue);
//lc是一个列表;
var result=lc.Select(currItem=>
lc.其中(anItem=>
Class1.isnexture(currItem,anItem)).Sum(item=>item.myValue)+currItem.myValue);
对于每个项目,它将选择它的邻居,将它们相加并添加当前项目值
如果你的逻辑也考虑对角线元素或其他事物,你所要做的就是改变<代码> IsNeighbour <代码>相应地
不清楚什么是<代码>值< /> >,<代码>值[UP] <代码>等等。你能给出一些示例输入和示例输出吗?写一些代码,然后用你做不到的部分寻求帮助。目前,您模糊地描述了一个问题,但它非常不清楚。您希望按范围对项目进行分组。因此,我将使用数学函数math.Round()对项目进行分组,以便获得一系列值。