根据值列出两个列表 [英] Compare two lists based on their values

查看:95
本文介绍了根据值列出两个列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hello All,



我在编写逻辑时遇到困难,我必须比较两个列表值并记录它们之间的差异和相似之处。这些List值绑定到网页中的下拉列表。



我需要跟踪用户是否修改/删除/添加任何值。 />


例如:

Hello All,

I am stuck in writing a logic where I have to compare two list values and record the differences and similarities between them. These List values are bound to the Drop Down List in a web page.

I need to trace whether any values are modified/Removed/Added by the user.

For an example:

List<objx> lstObj1;

Objx Obj1= {Id1,name1,Address1}
Objx Obj2= {Id2,name2,Address2}
Objx Obj3= {Id3,name3,Address3}





所有上述对象都将添加到lstObj1



All the above objects will be added in lstObj1

List<objx> lstObj2;
Objx Obj4= {Id1,name4,Address4}
Objx Obj5= {Id5,name5,Address5}
Objx Obj6= {Id6,name6,Address6}



所有上述对象都将被添加到列表2中。



现在我想要输出如下..



名称已被更改为Id1,Id5和Id6由用户添加。



你能不能请任何人帮我提供一些逻辑提示给我。



[edit]已添加代码块 - OriginalGriff [/ edit]


All the above objects will be added to list 2.

Now I want the output as below..

Name has been changed for Id1,Id5 and Id6 are added by the user.

Could you please any one help me in providing some logic hints to me.

[edit]Code block added - OriginalGriff[/edit]

推荐答案

不是很好的实现,但也许可以给你提示。



Not a good implemantation, but maybe could give you hint.

public class Objx
{
    private int _id;
    private string _name;
    private string _address;

    public Objx(int id, string name, string address)
    {
        _id = id;
        _name = name;
        _address = address;
    }

    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public string Address
    {
        get { return _address; }
        set { _address = value; }
    }

    public string Compare(Objx target)
    {
        if (this._id == target.Id)
        {
            var sb = new StringBuilder();
            if (this._name != target.Name)
                sb.AppendLine("For ID: " + this.Id + " Name changed: " + this._name);

            if (this.Address != target.Address)
                sb.AppendLine("For ID: " + this.Id + " Address changed: " + this.Address);

            return sb.ToString();
        }
        return "different items";
    }
}





然后;





Then;

var lstObj1 = new List<Objx>();

var obj1 = new Objx(1, "name1", "Address1");
var obj2 = new Objx(2, "name2", "Address2");
var obj3 = new Objx(3, "name3", "Address3");

lstObj1.AddRange(new List<Objx> { obj1, obj2, obj3 });

var lstObj2 = new List<Objx>();

var obj4 = new Objx(1, "name4", "Address4");
var obj5 = new Objx(5, "name5", "Address5");
var obj6 = new Objx(6, "name6", "Address6");

lstObj2.AddRange(new List<Objx> { obj4, obj5, obj6 });

var foundItems = new List<Objx>();
var sb = new StringBuilder();
foreach (var obj in lstObj2)
{
    var found = lstObj1.Find(p => p.Id == obj.Id);
    if (found == null)
    {
        sb.AppendLine("ID: " + obj.Id + " " + obj.Name + " is added.");
    }
    else
    {
        sb.AppendLine(obj.Compare(found));
        foundItems.Add(found);

    }
}

lstObj1.Except(foundItems).ToList().ForEach(p => sb.AppendLine("ID: " + p.Id + " " + p.Name + " removed."));
richTextBox1.AppendText(sb.ToString());


这篇关于根据值列出两个列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆