1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | using System; using System.Linq; using System.Collections.Generic; class Object1 { public int id; public DateTime time; public override String ToString() { return String.Format("[{0}]{1}", id,time); } } public class Test { public static void Main() { List<Object1> listOfNewestItems = new List<Object1>() { new Object1 { id = 1, time = DateTime.Now.AddHours(1) }, new Object1 { id = 2, time = DateTime.Now }, new Object1 { id = 3, time = DateTime.Now } }; List<Object1> listToCycleThrough = new List<Object1>() { new Object1 { id = 1, time = DateTime.Now }, new Object1 { id = 2, time = DateTime.Now } }; Console.WriteLine("before update(cycle-list):"); foreach(var o1 in listToCycleThrough) Console.WriteLine(o1); Console.WriteLine("before update(new-list):"); foreach(var o2 in listOfNewestItems) Console.WriteLine(o2); var listOfNewestIDs = listOfNewestItems.Select(o => o.id); var listToCycleIDs = listToCycleThrough.Select(o => o.id); var newestIDs = listOfNewestIDs.Except(listToCycleIDs); var newestObjects = from obj in listOfNewestItems join objID in newestIDs on obj.id equals objID select obj; var updateObjects = from newObj in listOfNewestItems join oldObj in listToCycleThrough on newObj.id equals oldObj.id where newObj.time > oldObj.time select new { oldObj, newObj }; foreach (var updObject in updateObjects) updObject.oldObj.time = updObject.newObj.time; listToCycleThrough.AddRange(newestObjects); Console.WriteLine("after update(cycle-list):"); foreach(var o1 in listToCycleThrough) Console.WriteLine(o1); Console.WriteLine("after update(new-list):"); foreach(var o2 in listOfNewestItems) Console.WriteLine(o2); } } |
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpjbGFzcyBPYmplY3QxCnsKICAgIHB1YmxpYyBpbnQgaWQ7CiAgICBwdWJsaWMgRGF0ZVRpbWUgdGltZTsKICAgIHB1YmxpYyBvdmVycmlkZSBTdHJpbmcgVG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBTdHJpbmcuRm9ybWF0KCJbezB9XXsxfSIsIGlkLHRpbWUpOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CiAgICAgICAgICAgTGlzdDxPYmplY3QxPiBsaXN0T2ZOZXdlc3RJdGVtcyA9IG5ldyBMaXN0PE9iamVjdDE+KCkgeyAKICAgICAgICAgICAgICAgIG5ldyBPYmplY3QxIHsgaWQgPSAxLCB0aW1lID0gRGF0ZVRpbWUuTm93LkFkZEhvdXJzKDEpIH0sCiAgICAgICAgICAgICAgICBuZXcgT2JqZWN0MSB7IGlkID0gMiwgdGltZSA9IERhdGVUaW1lLk5vdyB9LAogICAgICAgICAgICAgICAgIG5ldyBPYmplY3QxIHsgaWQgPSAzLCB0aW1lID0gRGF0ZVRpbWUuTm93IH0gCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIExpc3Q8T2JqZWN0MT4gbGlzdFRvQ3ljbGVUaHJvdWdoID0gbmV3IExpc3Q8T2JqZWN0MT4oKSB7IAogICAgICAgICAgICAgICAgbmV3IE9iamVjdDEgeyBpZCA9IDEsIHRpbWUgPSBEYXRlVGltZS5Ob3cgfSwKICAgICAgICAgICAgICAgIG5ldyBPYmplY3QxIHsgaWQgPSAyLCB0aW1lID0gRGF0ZVRpbWUuTm93IH0gCiAgICAgICAgICAgIH07CgogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiYmVmb3JlIHVwZGF0ZShjeWNsZS1saXN0KToiKTsKICAgICAgICAgICAgZm9yZWFjaCh2YXIgbzEgaW4gbGlzdFRvQ3ljbGVUaHJvdWdoKQogICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUobzEpOwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiYmVmb3JlIHVwZGF0ZShuZXctbGlzdCk6Iik7CiAgICAgICAgICAgIGZvcmVhY2godmFyIG8yIGluIGxpc3RPZk5ld2VzdEl0ZW1zKQogICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUobzIpOwoKICAgICAgICAgICAgdmFyIGxpc3RPZk5ld2VzdElEcyA9IGxpc3RPZk5ld2VzdEl0ZW1zLlNlbGVjdChvID0+IG8uaWQpOwogICAgICAgICAgICB2YXIgbGlzdFRvQ3ljbGVJRHMgPSBsaXN0VG9DeWNsZVRocm91Z2guU2VsZWN0KG8gPT4gby5pZCk7CiAgICAgICAgICAgIHZhciBuZXdlc3RJRHMgPSBsaXN0T2ZOZXdlc3RJRHMuRXhjZXB0KGxpc3RUb0N5Y2xlSURzKTsKICAgICAgICAgICAgdmFyIG5ld2VzdE9iamVjdHMgPSBmcm9tIG9iaiBpbiBsaXN0T2ZOZXdlc3RJdGVtcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gb2JqSUQgaW4gbmV3ZXN0SURzIG9uIG9iai5pZCBlcXVhbHMgb2JqSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Qgb2JqOwogICAgICAgICAgICB2YXIgdXBkYXRlT2JqZWN0cyA9IGZyb20gbmV3T2JqIGluIGxpc3RPZk5ld2VzdEl0ZW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbiBvbGRPYmogaW4gbGlzdFRvQ3ljbGVUaHJvdWdoIG9uIG5ld09iai5pZCBlcXVhbHMgb2xkT2JqLmlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbmV3T2JqLnRpbWUgPiBvbGRPYmoudGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBuZXcgeyBvbGRPYmosIG5ld09iaiB9OwoKICAgICAgICAgICAgZm9yZWFjaCAodmFyIHVwZE9iamVjdCBpbiB1cGRhdGVPYmplY3RzKQogICAgICAgICAgICAgICAgdXBkT2JqZWN0Lm9sZE9iai50aW1lID0gdXBkT2JqZWN0Lm5ld09iai50aW1lOwogICAgICAgICAgICBsaXN0VG9DeWNsZVRocm91Z2guQWRkUmFuZ2UobmV3ZXN0T2JqZWN0cyk7CgogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiYWZ0ZXIgdXBkYXRlKGN5Y2xlLWxpc3QpOiIpOwogICAgICAgICAgICBmb3JlYWNoKHZhciBvMSBpbiBsaXN0VG9DeWNsZVRocm91Z2gpCiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShvMSk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJhZnRlciB1cGRhdGUobmV3LWxpc3QpOiIpOwogICAgICAgICAgICBmb3JlYWNoKHZhciBvMiBpbiBsaXN0T2ZOZXdlc3RJdGVtcykKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKG8yKTsKCX0KfQ==
-
upload with new input
-
result: Success time: 0.07s memory: 37376 kB returned value: 0
before update(cycle-list): [1]9/30/2012 4:45:06 PM [2]9/30/2012 4:45:06 PM before update(new-list): [1]9/30/2012 5:45:06 PM [2]9/30/2012 4:45:06 PM [3]9/30/2012 4:45:06 PM after update(cycle-list): [1]9/30/2012 5:45:06 PM [2]9/30/2012 4:45:06 PM [3]9/30/2012 4:45:06 PM after update(new-list): [1]9/30/2012 5:45:06 PM [2]9/30/2012 4:45:06 PM [3]9/30/2012 4:45:06 PM


