我有一个练习项目,我需要比较两个列表。我如何进行比较?

时间:2014-07-18 12:21:52

标签: c# .net

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CompareNumbers
{
    public partial class Form1 : Form
    {
        List<int> myValues = new List<int>(new int[] { 5, 9, 3, 4, 7, 12, 0, 15 });
        List<int> newValues = new List<int>();

        public Form1()
        {
            InitializeComponent();

            Compare();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void Compare()
        {
            for (int i = 0; i < myValues.Count; i++)
            {
                if (!newValues.Contains(myValues[i]))
                {
                    newValues.Add(myValues[i]);
                }

                for (int x = 0; x < newValues.Count; x++)
                {
                }
            }
        }
    }
}

我有一些带有一些数字的列表。还有一个空的列表。

我需要创建两个列表的比较并检查新数字。

第一次List newValues为空,因此条件应该使它添加myValues中的所有数字。所以现在newValues包含所有数字。

现在我需要首先为一个数字制定一些条件,然后为两个数字制作一些条件,然后是三个数字。

我的意思是,如果新的号码我在myValues列表中添加了一个新号码,以检查myValues中是否存在此号码,如果它没有添加它,则不会将其添加到newValues。

然后,如果将两个数字添加到myValues列表中,然后添加三个数字。要查看myValues中是否已存在这些数字,请不要将它们添加到newValues,如果它们尚未存在于myValues中,则将它们添加到newValues。

我的问题是如何在内循环中创造所有条件?应该有多少个IF。

这部分我也做了我不确定它是否正确:

if (!newValues.Contains(myValues[i]))
{
   newValues.Add(myValues[i]);
}

我没有解释它的逻辑性。

我有这个空列表:

List<NewsLine> OnlyNew = new List<NewsLine>();

然后我有这个班:

class NewsLine
{
   public string text;
   public string time;
   public string link;
}

然后这个方法:

private void AddOnlyNew(List<NewsLine> test_lnl)
{
    for (int x = 0; x < test_lnl.Count; x++)
    {
       for (int y = 0; y < OnlyNew.Count; y++)
       {
       }
    }
}

现在我需要检查每次是否有新文本,时间,链接然后添加它们。

仅仅检查我应该在内循环中进行的文本或时间或链接是否足够,使用IF来决定是否将它们添加到OnlyNew列表中。

修改

class NewsLine
   {
      public string text;
      public string original_time;
      public string link;

      // Straight compare of the two objects.
      public static int Compare(NewsLine n1, NewsLine n2)
      {
         // How to do the comparisdon is up to you.
         // In this example, if the first property is different we use that, 
         // else if the second property is different use that, else use the final property.
         if (n1.text != n2.text)
            return string.Compare(n1.text, n2.text);
         else if (n1.original_time != n2.original_time)
            return string.Compare(n1.original_time, n2.original_time);
         else
            return string.Compare(n1.link, n2.link);
      }

3 个答案:

答案 0 :(得分:3)

如果我理解正确,你可以这样做。 这将添加来自nowValue的任何不存在于newValues中的项目。

newValues.AddRange(existingValue.Except(newValues));

答案 1 :(得分:1)

创建一个尼特测试,如果他们需要是相同的订单,请使用CollectionAssert.AreEqual()CollectionAssert.AreEquivilent()他们只需要包含相同的项目。

答案 2 :(得分:0)

您需要循环第一个列表以确保添加所有项目:

foreach(int existingValue in myValues)
{
    if(!newValues.Contains(existingValue))
    {
        newValues.Add(existingValue);
    }
}

这也可以使用LINQ:

完成
newValues.AddRange(myValues.Where(n => !newValues.Contains(n)));