0

我有 2 个数组列表,我动态添加了它的值,如何比较它们并检查它们在循环中是否相等?像这样的东西:

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]

例如,存储在答案中的第一个数组等于存储在选择中的第一个数组。

4

2 回答 2

1
int cnt = 0;
        foreach (var x in answers)
        {
            foreach (var y in choosen)
            {
                if (x == y)
                {
                    cnt++;
                }
            }
        }

在这种情况下,您也可以使用 linq 的“相交”。

在您的情况下,以下将是解决方案

for (int i = 0; i < answers.Count; i++)
{
    if (answers[i] == choosen[i])
    {
        cnt++;
    }
}
于 2013-07-19T06:48:55.067 回答
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; 
于 2013-07-19T07:10:17.317 回答