我想使用IEnumerable.Except
来比较这两个序列的不同之处。
计划说明:: 该计划是一个硬币投掷游戏。 1是头,2是尾。
程序循环5次,每次循环程序检查数字是否匹配。数字是1或2我使用随机。如果硬币匹配,则将其更新为listView。
标签:( lbl_Numb_1
,lbl_Numb_2
,lbl_Numb_3
,lbl_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);
}
}
答案 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将保留两个列表中都不存在的项目。