Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menggabungkan Dua Senarai Objek Orang Menggunakan LINQ dan Mengendalikan Kemas Kini Atribut Berdasarkan Padanan Nama?

Bagaimana untuk Menggabungkan Dua Senarai Objek Orang Menggunakan LINQ dan Mengendalikan Kemas Kini Atribut Berdasarkan Padanan Nama?

Susan Sarandon
Lepaskan: 2024-12-26 19:04:13
asal
496 orang telah melayarinya

How to Merge Two Lists of Person Objects Using LINQ and Handle Attribute Updates Based on Name Matching?

Buat Senarai daripada Dua Senarai Objek dengan Linq

Pertimbangkan senario berikut:

class Person
{
    string Name;
    int Value;
    int Change;
}

List<Person> list1;
List<Person> list2;
Salin selepas log masuk

Objektifnya ialah untuk menggabungkan dua senarai ke dalam Senarai baharu. Jika rekod gabungan berkaitan dengan orang yang sama, atributnya hendaklah diselaraskan seperti berikut: nama hendaklah sepadan, nilai hendaklah mencerminkan rekod orang dalam list2 dan perubahan hendaklah nilai dalam list2 tolak nilai dalam list1. Jika tidak, perubahannya hendaklah 0.

Penyelesaian:

Kesatuan kaedah Linq amat sesuai untuk tugasan ini:

var mergedList = list1.Union(list2).ToList();
Salin selepas log masuk

Ini operasi menggabungkan dua senarai, mengalih keluar pendua. Secara lalai, ia akan menggunakan kaedah Equals dan GetHashCode yang ditakrifkan dalam kelas Person. Walau bagaimanapun, jika kaedah ini tidak ditindih, kaedah tersebut mungkin tidak membandingkan objek tersuai kami dengan berkesan (cth., menggunakan sifat Name sebagai perbandingan).

Overriding Equals dan GetHashCode:

Untuk memastikan perbandingan yang tepat mengikut nama, ganti kaedah sebagai berikut:

public override bool Equals(object obj)
{
    var person = obj as Person;
    return Equals(person);
}

public override int GetHashCode()
{
    return Name.GetHashCode();
}

public bool Equals(Person personToCompareTo)
{
    if (personToCompareTo == null || string.IsNullOrEmpty(personToCompareTo.Name))
        return false;

    return Name.Equals(personToCompareTo.Name);
}
Salin selepas log masuk

Pembanding Tersuai:

Sebagai alternatif, buat pembanding tersuai yang melaksanakan antara muka IEqualityComparer. Pembanding ini boleh disediakan sebagai hujah kedua kepada kaedah Kesatuan. Maklumat lanjut tentang pembanding tersuai boleh didapati di sini: http://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx.

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Dua Senarai Objek Orang Menggunakan LINQ dan Mengendalikan Kemas Kini Atribut Berdasarkan Padanan Nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan