Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实施“;模板”;使用linq的模式?_C#_Linq - Fatal编程技术网

C# 如何实施“;模板”;使用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

我有一个带有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 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()对项目进行分组,以便获得一系列值。