如何使用另一个数组和THAT数组中存在的值在数组中找到索引?

时间:2018-08-21 01:58:45

标签: c# arrays

我有一个看起来像这样的c#类:

   public class MemberData
{
    public int meme_ck;
    public string meme_name;
    public bool meme_active;

    public MemberData(int ck2, string name2, bool active2)
    {
        meme_ck = ck2;
        meme_name = name2;
        meme_active = active2;
    }
}

我从该类中制作了两个数组:

    private MemberData[] memarray1 = new MemberData[10000];
    private MemberData[] memarray2 = new Memberdata[10000];

在我的应用程序过程中,我使用这两个数组进行了很多工作,并且值发生了变化,等等。成员的名称或活动状态可能会发生变化,这导致araries变得不同。

最终,我需要将它们进行比较,以便根据第一个结果显示的结果与另一个结果进行比较。

例如,根据应用程序的作用,在第一个数组中停用了该成员,我需要更新数组2来停用该同一成员。

我正在尝试将一些数据库设计理念与int CK(伪造密钥)一起使用,以便能够快速在基于CK的另一个数组中查找条目。

由于无法弄清楚,因此不得不使用嵌套的for这样的循环,这很糟糕:

        foreach (Memberdata md in memarray1)
    {
        foreach (Memberdatamd2 in memarray2)
        {
            if (md.ck = md2.ck)
            {
                //de-activate member
            }
        }
    }

有更好的方法吗?当我从第一个数组获得CK值时,我只想在第二个基于CK的数组中找到索引。

关于结构的其他任何技巧或建议也将不胜感激。我应该使用数组以外的东西吗?我将如何通过列表完成同一件事?

谢谢!

2 个答案:

答案 0 :(得分:6)

  

我应该使用数组以外的东西吗?

是的。不要使用数组;它们很少是正确的数据结构。

  

我如何使用列表来完成相同的事情?

列表仅稍微好一点。它们不支持您所需的高效按键查找操作。

这听起来像是您想要的,而不是两个数组,两个Dictionary<int, MemberData>,其中键为ck

答案 1 :(得分:1)

我完全同意 Eric Lippert 的上述回答。最好不要使用Array。 使用List<MemberData>可以实现相同的目的。您也可以使用LINQ来查询您的DataStructure。

跟随是仅使用数组即可达到结果的一种方式

class Program
{
    static MemberData[] memarray1 = new MemberData[10000];
    static MemberData[] memarray2 = new MemberData[10000];
    static void Main(string[] args)
    {
        for (int i = 0; i < memarray1.Length; i++)
        {
            memarray1[i] = new MemberData(i + 1, "MemName" + i + 1, true);
            memarray2[i] = new MemberData(i + 1, "MemName" + i + 1, true);
        }

        // SIMULATING YOUR APP OPERATION OF CHANGING A RANDOM ARRAY VALUE IN memarray1

        int tempIndex = new Random().Next(0, 9999);

        memarray1[tempIndex].meme_name = "ChangedName";
        memarray1[tempIndex].meme_active = false;

        //FOR YOUR UDERSTADNING TAKING meme_ck IN AN INTEGER VARIABLE

        int ck_in_mem1 = memarray1[tempIndex].meme_ck;

        //FINDING ITEM IN ARRAY2

        MemberData tempData = memarray2.Where(val => val.meme_ck == ck_in_mem1).FirstOrDefault();

        // THIS IS YOUR ITEM.

        Console.ReadLine();
    }
}