إزالة بايت مكررة [] ق من مجموعة
-
29-09-2020 - |
سؤال
من المحتمل أن يكون هذا سؤالا بسيطا للغاية.أحاول ببساطة إزالة بايت مكرر [] من مجموعة.
نظرا لأن السلوك الافتراضي هو مقارنة المراجع ، فقد اعتقدت أن إنشاء إيكواليتيكومبارر سيعمل ، لكنه لا يعمل.
لقد حاولت استخدام هاشست و لينق متميزة ().
نموذج التعليمات البرمجية:
using System;
using System.Collections.Generic;
using System.Linq;
namespace cstest
{
class Program
{
static void Main(string[] args)
{
var l = new List<byte[]>();
l.Add(new byte[] { 5, 6, 7 });
l.Add(new byte[] { 5, 6, 7 });
Console.WriteLine(l.Distinct(new ByteArrayEqualityComparer()).Count());
Console.ReadKey();
}
}
class ByteArrayEqualityComparer : IEqualityComparer<byte[]>
{
public bool Equals(byte[] x, byte[] y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(byte[] obj)
{
return obj.GetHashCode();
}
}
}
الناتج:
2
المحلول
ال GetHashCode
سيتم استخدامها من قبل Distinct
, ، ولن تعمل "كما هي";جرب شيئا مثل:
int result = 13 * obj.Length;
for(int i = 0 ; i < obj.Length ; i++) {
result = (17 * result) + obj[i];
}
return result;
التي ينبغي أن توفر شروط المساواة اللازمة لرموز التجزئة.
شخصيا, ، أود أيضا فتح اختبار المساواة للأداء:
if(ReferenceEquals(x,y)) return true;
if(x == null || y == null) return false;
if(x.Length != y.Length) return false;
for(int i = 0 ; i < x.Length; i++) {
if(x[i] != y[i]) return false;
}
return true;
لا تنتمي إلى StackOverflow