0

我有以下代码,它将随机为我的数组分配 6 个数字。

public void LottoWinners(object sender, EventArgs e)
{

    Dictionary<int, int> number = new Dictionary<int, int>();
    Random generator = new Random();
    while (number.Count < 6)
    {
        number[generator.Next(1, 49)] = 1;
    }

    string[] lotto = number.Keys.OrderBy(n => n).Select(s => s.ToString()).ToArray();

    //write some logic to find out who has 3 match numbers 
    //and assign there ticket to the winners table tblWinners

}

然后,我需要将数组中的值与 tblTickets 表中的值进行比较,以查看获胜者是谁。但是我需要分解获胜者:

因此,如果他们有 3 个匹配的号码,则将 ticketID 插入到 tblWinners 表中。

我正在考虑写一个案例陈述,但如何检查平等?

问题是我在表中保存我的值,如下所示:

tblLotto(val0,val1,val2,val3,val4,val5)

所以我需要使用某种逻辑搜索我的表....

我的玩家类如下所示:

公共类玩家 { public void LottoDraw(object sender, EventArgs e) { var connectionstring = "Server=C;Database=lotto;User Id=lottoadmin;Password=password;";

    using (var con = new SqlConnection(connectionstring))  // Create connection with automatic disposal
    {
        con.Open();

        // Create new DataTable
        DataTable player = new DataTable();
        {
            // Create new DataAdapter
            using (SqlDataAdapter a = new SqlDataAdapter("SELECT TOP 1 LOTTOID, VAL0, VAL1, VAL2, VAL3, VAL4, VAL5 FROM tblLotto ORDER BY NEWID()", con))

            {
                // Use DataAdapter to fill DataTable
                a.Fill(player);
            }


            }
        }

    }

}

}

4

2 回答 2

2

可以使用Intersect()找出两个集合共有的项,然后申请Count()查看交集是否至少有三个项:

var winners = players.
    Where(player => player.Numbers.Intersect(lotto).Count() >= 3);

关于您的实施的几点说明:

  • Dictionary与其使用 a并将值设置为1,不如使用a HashSet:您对键感兴趣,而不是值,因此 aSet会更合适
  • 在需要显示之前不要将数字转换为字符串;最好使用一组数字来搜索数字。
  • 如果使用集合,则选择可以重写如下:

var lotto = new HashSet<int>(...); // put six numbers here
var winners = players.
    Where(player => player.Numbers.Where(n => lotto.Contains(n)).Count() >= 3);

编辑:(回应问题的编辑)您的Player班级包含球员的号码作为单独的属性。您可以通过添加属性来添加将它们作为集合检索的方法Numbers,如下所示:

class Player {
    ...
    public int val0, val1, val2, val3, val4, val5, val6;
    public IEnumerable<int> Numbers {
        get {
            return new[] {val0, val1, val2, val3, val4, val5, val6};
        }
    }
}
于 2013-06-23T12:26:17.260 回答
0

你可以做条件(使用 System.Linq 添加):

UsersNumbers.Intersect(GeneratedNumbers).Count() >= 3
于 2013-06-23T12:26:24.353 回答