【问题标题】:Merge different array of objects with one same property and same length合并具有相同属性和相同长度的不同对象数组
【发布时间】:2021-05-02 16:17:19
【问题描述】:

我有三个相同类型的数组,每个数组的长度相同,我需要根据它们共享的属性将它们合并为一个。 示例:

类:

public class X
{
    public DateTime Epoch { get; set; }
    public double Value { get; set; }
};

Public class Body 
{
    public X[] Weight {get; set;}
    public X[] Height {get; set;}
    public X[] ShoeSize {get; set;}
};

所有这些数组都具有相同的长度,并且每个元素的属性“Epoch”都相同且顺序相同(因此Weight[0].Epoch == Height[0].Epoch == ShoeSize[0].Epoch ... Weight[1].Epoch == Height[1].Epoch 等等) 我需要一个具有合并属性的对象数组,如下所示:

resultArray[n] = {
    Epoch: Weight[n]/Height[n]/ShoeSize[n].Epoch
    Height: Height[n].Value
    Weight: Weight[n].Value
    ShoeSize: ShoeSize[n].Value
}

我怎样才能做到这一点?我一直在尝试使用Dictionary 来遍历数组,但我被卡住了。

提前致谢!

【问题讨论】:

    标签: c# arrays .net


    【解决方案1】:

    这就是你的意思吗?因为我很难正确理解它。

     var results =
                from height in body.Height
                from weight in body.Weight
                from shoeSize in body.ShoeSize
                select new
                {
                    Epoch = height.Epoch,
                    Height = height.Value,
                    Weight = weight.Value,
                    ShoeSize = shoeSize.Value
                };
    

    【讨论】:

      【解决方案2】:

      您可以使用 LINQ Zip 函数通过索引将数组连接在一起:

      var result = Body.Weight
          .Zip(Body.Height, (w, h) => (w, h))
          .Zip(Body.ShoeSize, (wh, s) =>
              (weight: wh.w,
               height: wh.h,
               shoeSize: s,
               epoch: wh.w/wh.h/s.Epoch))
          .ToArray();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-16
        • 2019-06-05
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        • 2020-02-22
        相关资源
        最近更新 更多