এটি করার জন্য কয়েকটি টুকরো রয়েছে, ধরে নিলাম প্রতিটি তালিকায় সদৃশ থাকে না, নাম একটি অনন্য শনাক্তকারী, এবং উভয়ই তালিকা অর্ডার করা হয় না।
একটি একক তালিকা পেতে প্রথমে একটি অ্যাপেনড এক্সটেনশন পদ্ধতি তৈরি করুন:
static class Ext {
public static IEnumerable<T> Append(this IEnumerable<T> source,
IEnumerable<T> second) {
foreach (T t in source) { yield return t; }
foreach (T t in second) { yield return t; }
}
}
সুতরাং একটি একক তালিকা পেতে পারেন:
var oneList = list1.Append(list2);
তারপরে নামে গ্রুপ করুন
var grouped = oneList.Group(p => p.Name);
তারপরে প্রতিটি গ্রুপকে একযোগে একটি গোষ্ঠী প্রক্রিয়া করার জন্য সহায়তার সাহায্যে প্রক্রিয়া করতে পারেন
public Person MergePersonGroup(IGrouping<string, Person> pGroup) {
var l = pGroup.ToList(); // Avoid multiple enumeration.
var first = l.First();
var result = new Person {
Name = first.Name,
Value = first.Value
};
if (l.Count() == 1) {
return result;
} else if (l.Count() == 2) {
result.Change = first.Value - l.Last().Value;
return result;
} else {
throw new ApplicationException("Too many " + result.Name);
}
}
যা প্রতিটি উপাদানের জন্য প্রয়োগ করা যেতে পারে grouped
:
var finalResult = grouped.Select(g => MergePersonGroup(g));
(সতর্কতা: অরক্ষিত)