3 NİSAN 2009, Cuma
C karşılaştırarak dizileri#
Birbirleri ile iki diziyi karşılaştırmak için çalışıyorum. Bu kodu denedim ve aşağıdaki hataları aldım.
static bool ArraysEqual(Array a1, Array a2)
{
if (a1 == a2)
return true;
if (a1 == null || a2 == null)
return false;
if (a1.Length != a2.Length)
return false;
IList list1 = a1, list2 = a2; //error CS0305: Using the generic type 'System.Collections.Generic.IList<T>' requires '1' type arguments
for (int i = 0; i < a1.Length; i )
{
if (!Object.Equals(list1[i], list2[i])) //error CS0021: Cannot apply indexing with [] to an expression of type 'IList'(x2)
return false;
}
return true;
}
Neden böyle bir hata alabilirim? Düşük teknolojili bir çözüm için gittim ve gayet iyi çalışıyor, ama kopyala/her tür için birkaç kez yapıştırmak için istiyorum bunu.
static bool ArraysEqual(byte[] a1, byte[] a2)
{
if (a1 == a2)
return true;
if (a1 == null || a2 == null)
return false;
if (a1.Length != a2.Length)
return false;
for (int i = 0; i < a1.Length; i )
{
if (a1[i] != a2[i])
return false;
}
return true;
}
CEVAP
3 NİSAN 2009, Cuma
"Neden böyle bir hata alıyorum?" - muhtemelen, yok "using System.Collections;
" dosyasının en üstünde sadece "using System.Collections.Generic;
" - ancak, jenerik muhtemelen daha güvenli - aşağıya bakın:
static bool ArraysEqual<T>(T[] a1, T[] a2)
{
if (ReferenceEquals(a1,a2))
return true;
if (a1 == null || a2 == null)
return false;
if (a1.Length != a2.Length)
return false;
EqualityComparer<T> comparer = EqualityComparer<T>.Default;
for (int i = 0; i < a1.Length; i )
{
if (!comparer.Equals(a1[i], a2[i])) return false;
}
return true;
}
Bunu Paylaş:
Nesnelerin performans JavaScript içind...
JavaScript N dizileri bağlamak için en...
Dizilerini( veya dizileri ) C sözlüğün...
'in PHP count(), O(1) veya O(n) d...
Kurucu Java dizileri - en iyi uygulama...