هل هناك عملية ينق لتحديد ما إذا كانت هناك عناصر في مجموعة الذين لديهم نفس القيم لزوج من خصائص؟
-
06-07-2019 - |
سؤال
و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 على أساس خصائصها (والمقارن المساواة الافتراضية لأنواع من هذه الخصائص).
نصائح أخرى
ويمكنك حقن بك المساواة المقارن الخاصة. المثال هنا هو: HTTP: // الاجتماعية .msdn.microsoft.com / منتديات / EN-US / linqprojectgeneral / موضوع / c5b71644-b2d9-422b-b7fe-ef3bef30bbac /
ما عليك سوى تحديد إلى كائن جديد، مجهول
var keys = items.Select( x => new { x.Name, x.Other } ).ToList();
if (keys.Distinct().Count() != keys.Count())
{
...
}