【问题标题】:How do I compare 2 arraylist in a for loop or foreach loop如何在 for 循环或 foreach 循环中比较 2 个数组列表
【发布时间】:2013-07-18 08:29:54
【问题描述】:

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

例如,存储在 answers 中的第一个数组等于存储在 choosen 中的第一个数组。

【问题讨论】:

  • ArrayList 不再是一个好的选择。考虑使用List<string>

标签: c# for-loop arraylist foreach


【解决方案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++;
    }
}

【讨论】:

  • 请注意,这不是通常定义“数组相等”的方式 - 它是 Intersect 的非优化实现(集合上的操作),因此忽略了顺序。该作业不太可能允许答案与问题的顺序不同。可能是for 的最基本用法。
  • 我希望它就像存储在 answers 中的第一个数组等于存储在 choosen 中的第一个数组。
  • 看来,解决方案并不总是正确的:imaging answers = ["A", "A", "A"], choosen = ["A", "B", "C "]。代码返回 3 而 1 是正确的,因为只有第一个 asnwer ("A" = "A") 是正确的。
  • 是的,我同意..现在我已经改变了。
【解决方案2】:

如果所有答案和选择的项目都是字符串,则可以使用 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&lt;String&gt;()choosen.OfType&lt;String&gt;())你可以使用List&lt;String&gt; 而不是ArrayList

替代循环实现(假设答案和选择的大小相同)

  int numberOfRightAnswers = 0;

  for (int i = 0; i < answers.Count; ++i)
    if (answers[i] == choosen[i])
      numberOfRightAnswers += 1;      

  int numberOfWrongAnswers = answers.Count - numberOfRightAnswers; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-20
    • 2023-04-05
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多