比较2个序列IEnumerable.Except在C#中

时间:2015-08-13 06:04:43

标签: c# .net ienumerable except

我想使用IEnumerable.Except来比较这两个序列的不同之处。

计划说明:: 该计划是一个硬币投掷游戏。 1是头,2是尾。

程序循环5次,每次循环程序检查数字是否匹配。数字是1或2我使用随机。如果硬币匹配,则将其更新为listView。

标签:( lbl_Numb_1lbl_Numb_2lbl_Numb_3lbl_Numb_4)生成随机数,1或2. lbl_Result_1复制lbl_Numb_2中的数字1}}并将它们添加到listview1。 lbl_Reslt_2复制lbl_Numb_4并将其添加到listview2。

我自己尝试过,但我似乎无法得到它。有人可以帮帮我吗。

private void btn_Match_Click(object sender, EventArgs e)
{
    //.Next means so that random number is not negative
    lbl_Numb_1.Text = rand.Next(1, 3).ToString();
    lbl_Numb_2.Text = rand.Next(1, 3).ToString();
    //Random Numbers for listbox2
    lbl_Numb_3.Text = rand.Next(1, 3).ToString();
    lbl_Numb_4.Text = rand.Next(1, 3).ToString();

    //This is for the first listbox. 
    if (lbl_Numb_1.Text == lbl_Numb_2.Text)
    {
        lbl_Result_1.Text = lbl_Numb_2.Text;
        //i = shows sequence id
        ListViewItem lvi = new ListViewItem("" + i);
        lvi.SubItems.Add(lbl_Result_1.Text);
        listView1.Items.Add(lvi);
    }

    //This is for the secound listbox
    if (lbl_Numb_3.Text == lbl_Numb_4.Text)
    {
        lbl_Result_2.Text = lbl_Numb_4.Text;
        //i = shows sequence id
        ListViewItem lview = new ListViewItem("" + i);
        lview.SubItems.Add(lbl_Result_2.Text);
        listView2.Items.Add(lview);
    }
}

enter image description here

2 个答案:

答案 0 :(得分:0)

在您的情况下,没有必要使用IEnumerable.Except。 比较两个序列最好使用Enumerable.SequenceEqual

例如,在这种情况下它返回true:

var list = new List<int>{1,1,2};
var list1 = new List<int>{1,1,2};
var k = list.SequenceEqual(list1);

但在这一个中是假的:

var list = new List<int>{1,1,2};
var list1 = new List<int>{1,2,1};
var k = list.SequenceEqual(list1);

答案 1 :(得分:0)

使用IEnumerable.Except()时需要注意。因为结果因您的比较而有所不同。 例如:

       List<int> l1 = new List<int>();
        l1.Add(1);
        l1.Add(2);
        l1.Add(3);

       List<int> l2 = new List<int>();
        l2.Add(2);
        l2.Add(4);

        IEnumerable<int> l3 = l2.Except(l1); // l3 will have 4
        IEnumerable<int> l4 = l1.Except(l2); //l4 will have 1,3

您可以做的是以两种方式使用IEnumberable.Except并将其存储在一个List中。

  IEnumerable<int> e1 = l2.Except(l1);   
  IEnumerable<int> e2 = l1.Except(l2);

    List<int> l3 = new List<int>();
    foreach (var item in e1)
    {
        l3.Add(item);
    }

    foreach (var item in e2)
    {
        l3.Add(item);
    }

l3将保留两个列表中都不存在的项目。