数据结构(或数组){XYZ}—如果X不存在,且Y满足条件,则用Z计算

本文关键字:满足 不存在 条件 计算 则用 如果 数组 XYZ 数据结构 | 更新日期: 2023-09-27 18:16:20

想弄清楚这个问题有很多麻烦,并感谢任何提示(LINQ可能?)

我有一个来自CSV字符串列表的数据结构

data[i].X = Convert.ToSingle(dataList[0]);
data[i].Y = Convert.ToSingle(dataList[1]);
data[i].Z = Convert.ToSingle(dataList[2]);

数据来自一张图像,因此每个X都有许多Y(带有相应的Z),例如:

X: 0 0 1 1 2 2
Y: 0 1 0 1 0 1
Z: 1 2 3 2 1 0

我需要找到与不同的X匹配的所有Z值(其中Y将在某些值之间)。我已经将数据结构转换为双数组来进行一些数学运算,所以我尝试了

distData[0] = distTemp[0].Distinct().ToArray();
for (int i = 0; i < data.Length; i++)
        {
            for (int j = 0; j < distData.Length; j++)
            { 
                if (data[i].Y > 0 && data[i].Y < 2 && data[i].X == dist[0][j])
                    dist[0][i] = data[i].Z;
            }
        }

这个工作,但现在我没有最模糊的概念如何与我给出的数据工作。我返回了我应该期望的,这是一个巨大的数组(data.Length),它有一些0值,然后是一组Z值(当条件满足时),然后是0,等等。

0 0 0 0 Z Z Z Z Z 0 0 0 Z Z Z Z 0 0 0 0 0 Z Z...

接下来我需要做的是对非零数据进行分组,所以对于上面我想要"平均第一组Z,忽略下一个0,平均下一组Z…",所以我最终得到了满足Y值条件的每个唯一X值的Z平均值(和其他计算)。

我不知道如何做那个逻辑,似乎从我在我的数据结构上使用的非常基本的LINQ(我是非常新的LINQ),可能有一个比很多数组迭代更好的方法-假设我甚至可以找出迭代逻辑。

谢谢

数据结构(或数组){XYZ}—如果X不存在,且Y满足条件,则用Z计算

如果您不想从n可用值中收集n,那么使用大小为n的数组并仅填充您想要收集的值似乎是一个坏主意。因为这正是你对dist[0]所做的:每个应该被收集的Z被设置为它在dist[0][i]的索引;对于所有其他Z,您不更改数组值。

相反,您应该只收集您感兴趣的值:

var values = new List<int>();
for (int i = 0; i < data.Length; i++)
{
    if (condition(data[i].Y))
        values.Add(data[i].Z);
}

之后,values将包含Y条件成功的所有Z。当然,这会极大地改变结果数据结构的外观,远离输入数据结构,但这就是您应该做的:获取输入数据并以您需要的方式对其进行转换。

然后,用LINQ表示也很简单:

var values = data.Where(d => condition(d.Y))
                 .Select(d => d.Z)
                 .ToList();