هل هناك عملية ينق لتحديد ما إذا كانت هناك عناصر في مجموعة الذين لديهم نفس القيم لزوج من خصائص؟

StackOverflow https://stackoverflow.com/questions/1630277

سؤال

وC #: لدي مجموعة من الكائنات. T ديه 2 منشأة. الملكية ألف والملكية B. القاعدة التي يحتاج هذه المجموعة على الالتزام هو أن الجمع بين قيم A و B يجب أن تكون فريدة من نوعها داخل المجموعة. وبعبارة أخرى، A و B تحتاج إليه لخدمة كمفتاح أساسي مركب.

هل هناك عملية في ينق يمكنني استخدامها للتحقق هذا الشرط؟ كنت أتوقع أن يكون شيء من هذا القبيل

if (items.Select(x => x.Name).Distinct().Count() != items.Select(x => x.Name).Count())

والعبارة أعلاه هو كيف يمكنني أن تحقق ما إذا كانت هناك عناصر في مجموعة والتي لها أسماء مكررة، ولكن لا أعرف كيف نفعل ذلك لأكثر من عقار واحد.

هل كانت مفيدة؟

المحلول

استخدم نوع مجهول لتحديد مفتاح مركب، منها مثلا.

int totalCount = items.Count();
int distinctCount = items.Select(x => new { x.Name, x.Other })
                         .Distinct()
                         .Count();

وأنواع مجهول تنفذ تلقائيا المساواة وhashcodes على أساس خصائصها (والمقارن المساواة الافتراضية لأنواع من هذه الخصائص).

نصائح أخرى

ما عليك سوى تحديد إلى كائن جديد، مجهول

var keys = items.Select( x => new { x.Name, x.Other } ).ToList();

if (keys.Distinct().Count() != keys.Count())
{
 ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top