簡體   English   中英

如何在for循環或foreach循環中比較2個arraylist

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM