如何在for循环或foreach循环中比较2个arraylist

时间:2013-07-19 06:38:42

标签: c# for-loop arraylist foreach

我有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]

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

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;