[英]How do I compare 2 arraylist in a for loop or foreach loop
我有2個arraylist,我動態添加了它的值,如何比較它們並檢查它們在循環中是否相等? 像這樣的東西:
ArrayList answers = new ArrayList();
ArrayList choosen = new ArrayList();
// in some method
{
answers.Add(qhm.Answer);
choosen.Add(tbox.Text);
}
然后在foreach循環中
private void button1_Click(object sender, RoutedEventArgs e) // Check Button
{
int c = 0;
foreach( //Compare two arraylist here)
{
if (answers == choosen) {
c++;
}
}
MessageBox.Show("You have answered : " + c + "questions correctly!");*/
}
我想要它
回答[1] =選擇[1]
回答[2] =選擇[2]
例如,存儲在答案中的第一個數組等於選擇中存儲的第一個數組。
int cnt = 0;
foreach (var x in answers)
{
foreach (var y in choosen)
{
if (x == y)
{
cnt++;
}
}
}
在這里你也可以使用linq的“Intersect”。
在您的情況下,以下將是解決方案
for (int i = 0; i < answers.Count; i++)
{
if (answers[i] == choosen[i])
{
cnt++;
}
}
如果所有答案和選擇的項目都是字符串,您可以使用Linq:
using System.Linq;
...
int numberOfRightAnswers = answers.OfType<String>().Zip(choosen.OfType<String>(), (x, y) => x == y).Where(x => x).Count();
int numberOfWrongAnswers = answers.Count - numberOfRightAnswers;
為了簡化代碼(丑陋的看起來answers.OfType<String>()
和choosen.OfType<String>()
)你可以使用List<String>
而不是ArrayList
替代循環實現(假設答案和選擇具有相同的大小)
int numberOfRightAnswers = 0;
for (int i = 0; i < answers.Count; ++i)
if (answers[i] == choosen[i])
numberOfRightAnswers += 1;
int numberOfWrongAnswers = answers.Count - numberOfRightAnswers;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.