Lambda加自訂比較子實現兩個列表的合并

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   使用   ar   for   資料   

一次項目有這樣的需求,本機存放區了json資料,可以轉化為對應的List列表,現在需要更新,從伺服器那裡擷取最新的資料更改。總的來說就是本地有個List表,如果資料需要更新,則會向伺服器發送請求來擷取需要更改的部分List表格,然後用戶端這邊就要去處理合并完整這次的更新,弄了一個下午,終於搞定,這次來mark一下。

主要推送的資料的兩個特性:

1.如果之前的列表需要增加,則出現在最新的資料推送List中

2.如果資料需要修改的話,則一樣推送更新,保持id不變,內容有所改變

範例程式碼如:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace test{    public class date    {        public int id { set; get; }        public string color { set; get; }        public string name { set; get; }        public decimal price { set; get; }        public string time { get; set; }    }    class MyComparer : IEqualityComparer<date>    {        public bool Equals(date x, date y)        {            return x.id == y.id;        }        public int GetHashCode(date obj)        {            return obj.id.GetHashCode();        }    }    class Program    {        static void Main(string[] args)        {            List<date> list1 = new List<date>()             {                new date() { id = 1, color = "1", name = "name1", price = 1,time="時間" },                new date() { id = 2, color = "2", name = "name2", price = 2,time="時間" },                new date() { id = 3, color = "3", name = "name3", price = 3,time="時間" },                new date() { id = 5, color = "5", name = "name5", price = 5,time="時間" },                new date() { id = 6, color = "6", name = "name8", price = 8,time="時間" }            };            List<date> list2 = new List<date>()             {                new date() { id = 1, color = "修改", name = "修改", price = 2,time="時間" },                new date() { id = 8, color = "增加", name = "增加", price = 2,time="時間" }            };            var result = list2.Union(list1, new MyComparer());            foreach (var item in result)            {                Console.WriteLine("id = {0}, card = {1}, name = {2}, price = {3}", item.id, item.color, item.name, item.price,item.time);            }        }    }}

測試的結果為:

從結果看出,id=1的資料需要修改,所以最新產生的List表中id為1的所有屬性都是更改後的結果,而在list1中沒有id為8的資料,說明這個是需要新增進去的一條記錄,因此在最新的List也有了,這次主要用到自訂的比較子,去實現IEqualityComparer<>這個介面。另外還用到了Lambda運算式

var result = list2.Union(list1, new MyComparer());特別是Union這個方法的使用,該方法還有很多種用法,這裡就舉個例子而已啦

源碼為:http://files.cnblogs.com/xmfdsh/Lambda%E4%BB%A5%E5%8F%8A%E6%AF%94%E8%BE%83%E5%99%A8.zip

Lambda加自訂比較子實現兩個列表的合并

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.