ฉันต้องการเปรียบเทียบคอลเลกชันสอง (ใน C #) แต่ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการใช้งานได้อย่างมีประสิทธิภาพ
ฉันได้อ่านหัวข้ออื่น ๆ เกี่ยวกับEnumerable.SequenceEqualแต่ไม่ใช่สิ่งที่ฉันต้องการ
ในกรณีของฉันคอลเลกชันสองรายการจะเท่ากันถ้าทั้งคู่มีรายการเดียวกัน (ไม่ว่าจะเรียงตามลำดับ)
ตัวอย่าง:
collection1 = {1, 2, 3, 4};
collection2 = {2, 4, 1, 3};
collection1 == collection2; // true
สิ่งที่ฉันมักจะทำคือการวนดูแต่ละไอเท็มของคอลเล็กชันหนึ่งและดูว่ามีอยู่ในคอลเลกชันอื่นหรือไม่จากนั้นวนลูปผ่านแต่ละรายการของคอลเลกชันอื่น (ฉันเริ่มจากการเปรียบเทียบความยาว)
if (collection1.Count != collection2.Count)
return false; // the collections are not equal
foreach (Item item in collection1)
{
if (!collection2.Contains(item))
return false; // the collections are not equal
}
foreach (Item item in collection2)
{
if (!collection1.Contains(item))
return false; // the collections are not equal
}
return true; // the collections are equal
อย่างไรก็ตามนี่ไม่ถูกต้องทั้งหมดและอาจไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการเปรียบเทียบคอลเลกชันสองรายการเพื่อความเท่าเทียมกัน
ตัวอย่างที่ฉันนึกได้ก็คือผิด:
collection1 = {1, 2, 3, 3, 4}
collection2 = {1, 2, 2, 3, 4}
ซึ่งจะเท่ากับการใช้งานของฉัน ฉันควรนับจำนวนครั้งที่พบแต่ละรายการแล้วและตรวจสอบให้แน่ใจว่าการนับมีค่าเท่ากันในทั้งสองคอลเลกชัน?
ตัวอย่างอยู่ในรูปแบบของ C # (ลองเรียกมันว่า pseudo-C #) แต่ให้คำตอบในภาษาใดก็ได้ที่คุณต้องการมันไม่สำคัญ
หมายเหตุ:ฉันใช้จำนวนเต็มในตัวอย่างเพื่อความเรียบง่าย แต่ฉันต้องการที่จะใช้วัตถุประเภทอ้างอิงด้วย (พวกเขาไม่ทำงานอย่างถูกต้องเป็นคีย์เนื่องจากมีการเปรียบเทียบการอ้างอิงของวัตถุเท่านั้นไม่ใช่เนื้อหา)