Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggabungkan Dua Senarai Objek Orang Menggunakan LINQ, Mengendalikan Pendua dengan Menggabungkan Nilai dan Mengira Perubahan?

Bagaimanakah Saya Boleh Menggabungkan Dua Senarai Objek Orang Menggunakan LINQ, Mengendalikan Pendua dengan Menggabungkan Nilai dan Mengira Perubahan?

Mary-Kate Olsen
Lepaskan: 2025-01-01 06:54:11
asal
644 orang telah melayarinya

How Can I Merge Two Lists of Person Objects Using LINQ, Handling Duplicates by Combining Values and Calculating Change?

Menggabungkan Dua Senarai Objek Menggunakan LINQ

Dalam senario seperti mengurus data, anda mungkin menghadapi situasi di mana anda perlu menggabungkan berbilang senarai objek. Mari kita pertimbangkan contoh khusus di mana kita mempunyai dua senarai objek Orang:


Orang kelas
{

string Name;
int Value;
int Change;
Salin selepas log masuk

}

Senarai< ;Orang> list1;
Senarai list2;

Matlamat kami adalah untuk menggabungkan kedua-dua senarai ini menjadi Senarai baharu. Apabila orang yang sama wujud dalam kedua-dua senarai, kita perlu menggabungkan nilai mereka semasa mengira perubahan dengan menolak nilai dalam list1 daripada nilai dalam list2. Bagi orang bukan pendua, perubahan hendaklah sifar.

Menggunakan Kaedah Linq Union

Satu pendekatan mudah untuk menggabungkan senarai ini adalah dengan menggunakan kaedah sambungan Linq Union . Kaedah ini menggabungkan unsur-unsur dua jujukan dan mengembalikan jujukan baharu. Contohnya:

<br>var mergedList = list1.Union(list2).ToList();<br>

Secara lalai, kaedah Union menggunakan kaedah Equals dan GetHashCode kelas Person untuk menentukan elemen pendua. Walau bagaimanapun, jika anda ingin membandingkan orang berdasarkan sifat tertentu, seperti Nama mereka, anda boleh mengatasi kaedah ini dalam kelas Orang.

/// <summary>
/// Checks if the provided object is equal to the current Person
/// </summary>
/// <param name="obj">Object to compare to the current Person</param>
/// <returns>True if equal, false if not</returns>
public override bool Equals(object obj)
{
    // Try to cast the object to compare to to be a Person
    var person = obj as Person;

    return Equals(person);
}

/// <summary>
/// Returns an identifier for this instance
/// </summary>
public override int GetHashCode()
{
    return Name.GetHashCode();
}

/// <summary>
/// Checks if the provided Person is equal to the current Person
/// </summary>
/// <param name="personToCompareTo">Person to compare to the current person</param>
/// <returns>True if equal, false if not</returns>
public bool Equals(Person personToCompareTo)
{
    // Check if person is being compared to a non person. In that case always return false.
    if (personToCompareTo == null) return false;

    // If the person to compare to does not have a Name assigned yet, we can't define if it's the same. Return false.
    if (string.IsNullOrEmpty(personToCompareTo.Name) return false;

    // Check if both person objects contain the same Name. In that case they're assumed equal.
    return Name.Equals(personToCompareTo.Name);
}
Salin selepas log masuk

Sebagai alternatif, anda boleh membuat kelas pembanding yang melaksanakan IEqualityComparer antara muka untuk menentukan kriteria perbandingan anda sendiri. Anda kemudiannya boleh menentukan pembanding ini sebagai parameter kedua dalam kaedah Kesatuan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Dua Senarai Objek Orang Menggunakan LINQ, Mengendalikan Pendua dengan Menggabungkan Nilai dan Mengira Perubahan?. 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