我有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]
例如,存储在答案中的第一个数组等于选择存储的第一个数组。
答案 0 :(得分:1)
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++;
}
}
答案 1 :(得分:1)
如果所有答案和选择的项目都是字符串,您可以使用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;