博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
合并兩個List,對方不存在相等的元素.則用null代替
阅读量:4042 次
发布时间:2019-05-24

本文共 1435 字,大约阅读时间需要 4 分钟。

已知有类

class Item{
public int id {
get; set; } public string result {
get; set; } public override string ToString() {
return $"{result}{id}"; }}

兩個實例:

List
oldSet = new List
{
new Item {
id = 1, result ="old"}, new Item {
id = 2, result ="old"}, new Item {
id = 3, result ="old"},};List
newSet = new List
{
new Item {
id = 2, result ="new"}, new Item {
id = 3, result ="new"}, new Item {
id = 4, result ="new"},};

現想合并两个列表,结果如下:

List mergedSet = [{old1, null}, {old2, new2}, {old3, new3}, {null, new4}];

實現方法1:兩次左联接,加上1次Union

var mergedSet = oldSet.Select(o =>    new {
OldSet = o, NewSet = newSet.FirstOrDefault(n => n.id == o.id)}) .Union(newSet.Where(n => oldSet.All(o => o.id != n.id)).Select(n => new {
OldSet = (Item) null, NewSet = n}));

方法2:兩次GroupJoin,加1次Union。DefaultIfEmpty,左联接時,即外联接不存在對應的元素,也会列出左聯接的元素。

var mergedSet = (from o in oldSet                     join n in newSet on o.id equals n.id into ns                     from n in ns.DefaultIfEmpty()                     select new {
OldSet = o, NewSet = n }) .Union(from n in newSet join o in oldSet on n.id equals o.id into os from o in os.DefaultIfEmpty() select new {
OldSet = o, NewSet = n }) .Distinct();

转载地址:http://iimdi.baihongyu.com/

你可能感兴趣的文章
我的处女贴: UITableView reloadDa…
查看>>
Operation Queue(Obj-C中并发的…
查看>>
iOS 开发资源汇总《转》
查看>>
iOS push 相关知识备忘
查看>>
Mysql导入导出.sql文件《转》
查看>>
Mysql for MacOSX 安装和基本操作
查看>>
MAC 系统的启动过程和系统启动时运…
查看>>
svn 常用命令《转》
查看>>
Linux中的环境设置PATH与exp…
查看>>
Improved logging in Objective-C …
查看>>
ShareKit 分享到FaceBook, Twitter…
查看>>
Facebook Share iOS Tutorial
查看>>
判断系统版本(用宏,非UIDevice)以…
查看>>
unsigned int的最大值及int的最大…
查看>>
Property List 支持的数据类型(us…
查看>>
Shell编程基础《转》
查看>>
Xcode 调试加入参数《Apple Dev Do…
查看>>
修改mysql编码《转》
查看>>
Posting images using TWRequest《…
查看>>
mac系统如何显示和隐藏文件 《转》
查看>>