将三个有序列表中缺少某些数据的相同数据配对

问题描述 投票:0回答:1

数据集如下:

int[] X = { 1, 2, 3, 5, 6, 7};
int[] Y = { 1, 2, 4, 5, 6, 7};
int[] Z = { 1, 2, 4, 6, 7 };

我正在编写一个 C# 程序,将相同的值配对在一起,并将缺失的值保留为 null,原始数据集按升序排列,结果也应该排序。

int[] a = { 0, 0, 0 };
int max = Math.Max(Math.Max(X.Count(), Y.Count()), Z.Count());
for (int i = 0; i < max; i++)
{
    var x = X[i - a[0]];
    var y = Y[i - a[1]];
    var z = Z[i - a[2]];
    if (x == y && y == z)
    {
        Console.WriteLine($"Upsert: {x}, {y}, {z}");
    }
    else
    {
        var v = x < y ? x : y;
        var minvalue = v < z ? v : z;
        bool[] list = {minvalue==x, minvalue == y, minvalue == z};
        int count = list.Where(x=>x.Equals(true)).Count();
        if (count == 1) {
            if (minvalue == x)
            {
                Console.WriteLine($"Upsert: {x}, null, null");
                a[1] = a[1] + 1; a[2] = a[2] + 1;
            }
            else if (minvalue == y)
            {
                Console.WriteLine($"Upsert: null, {y}, null");
                a[0] = a[0] + 1; a[2] = a[2] + 1;
            }
            else if (minvalue == z) {
                Console.WriteLine($"Upsert: null, null, {z}");
                a[0] = a[0] + 1; a[1] = a[1] + 1;
            }
        }
        else
        {

            if (minvalue == x)
            {
                if (x == y)
                {
                    Console.WriteLine($"Upsert: {x}, {y}, null");
                    a[2] = a[2] + 1;
                }
                else if (x == z)
                {
                    Console.WriteLine($"Upsert: {x}, null, {z}");
                    a[1] = a[1] + 1;
                }
            }
            else if (minvalue == y)
            {
                if (y == z)
                {
                    Console.WriteLine($"Upsert: null, {y}, {z}");
                    a[0] = a[0] + 1;
                }
                
            }
        }
    }
}

我写过类似的东西,但看起来很虚伪。有更好的方法吗?

“7”行也没有显示,因为没有一个列表足够长来计算所有现有的数字。

输出如下:

更新插入:1, 1, 1

更新插入:2, 2, 2

更新插入:3、空、空

更新插入:空、4、4

更新插入:5、5、空

更新插入:6, 6, 6

enter image description here

c# .net
1个回答
0
投票

您可以创建一个类来将所有值存储在一个实例中,然后检查它。

public class Number
{
   public int? X { get; private set; }
   public int? Y { get; private set; }
   public int? Z { get; private set; }

   public Number(int x, int y, int z)
   {
      X = x;
      Y = y;
      Z = Z;
   }
   
   public override ToString()
   {
      Console.WriteLine($"{X} {Y} {Z}");
   }
   
}

现在您可以存储并打印预期结果。

© www.soinside.com 2019 - 2024. All rights reserved.