比较两个点阵列并检查是否有相同的项目

时间:2014-03-15 00:42:31

标签: c# arrays compare

我有一块4x4的电路板。我需要创建2个随机Point变量,然后看看这些值之前没有被随机化。

我有2个Point数组变量,名为Item1Item2

  

假设在第一个循环之后我有Item1[0] =(1,0)和Item2[0] =(3,2)   在第二个循环中,我不应该得到(1,0)和(3,2)作为值   
在第三个循环中,我不应该从第一个循环或第二个循环中获取项目

现在,对于即将到来的循环,我需要找到一种方法,以便不再选择上述项目!

我的代码:

Random rnd = new Random();
Point[] Item1 = new Point[8];
Point[] Item2 = new Point[8];
for (int x = 0; x < 8; x++)
{
//create coordinates for the first item
    Item1[x].X = rnd.Next(8);
    Item1[x].Y = rnd.Next(8);
//create coordinates for the second item
    Item2[x].X = rnd.Next(8);
    Item2[x].Y = rnd.Next(8);
}

我正在考虑创建List<Point>并添加列表中的每个点。但我不知道如何检查列表中的所有项目,以及如何找到这些项目不匹配。

谢谢。

P.S。我想创建一个记忆游戏。这就是为什么我一次需要2分,这就是为什么重要的是我有独特的分数。

编辑:谢谢。为了将来的参考,我就是这样做的。

Random rnd = new Random();
Point[] Item1 = new Point[8];
Point[] Item2 = new Point[8];
List<Point> usedPoint = new List<Point>();
for (int x = 0; x < 8; x++)
{
        do
        {
            Item1[x].X = rnd.Next(8);
            Item1[x].Y = rnd.Next(8);
        }
        while(usedPoint.Contains(new Point(Item1[x].X,Item1[x].Y))== true);
        usedPoint.Add(new Point(Item1[x].X,Item1[x].Y));
        do
        {
            Item2[x].X = rnd.Next(8);
            Item2[x].Y = rnd.Next(8);
        }
        while (usedPoint.Contains(new Point(Item2[x].X, Item2[x].Y))== true);
        usedPoint.Add(new Point(Item2[x].X, Item2[x].Y));
}

2 个答案:

答案 0 :(得分:2)

有几种方法可以解决您的问题。 如果点数越来越大,您应该考虑使用Hashtable来提高性能。 如果您想使用List<Point> list,可以使用list.Contains(new Point(x,y))检查此点是否存在。

此处有关List<T>.Contains的更多参考资料:http://msdn.microsoft.com/en-us/library/bhkz42b3(v=vs.110).aspx

答案 1 :(得分:0)

你可以使用Hashset来提高性能 快速代码示例:您将需要类似的东西

var random = new Random();
var randomSet = new HashSet<int>();
const int size = 8 * 4; // 4 because for each coordinate and each item
for (int i = 0; i < size; i++)
{
    var r = random.Next();
    if (!randomSet.Contains(r)) {
        randomSet.Add(r);
    }
}
var uniqueRandowmNumbers = randomSet.ToArray();
int k = 0;
for (int x = 0; x < 8; x++)
{

//create coordinates for the first item
    Item1[x].X = uniqueRandowmNumbers[k++];
    Item1[x].Y = uniqueRandowmNumbers[k++];
//create coordinates for the second item
    Item2[x].X = uniqueRandowmNumbers[k++];
    Item2[x].Y = uniqueRandowmNumbers[k++];
}