jeśli kolejność nie ma znaczenia czy mogą istnieć duplikaty, to może:
public static class IEnumerableExtensions
{
public static bool HasSameContentsAs<T>(this ICollection<T> source,
ICollection<T> other)
{
if (source.Count != other.Count)
{
return false;
}
var s = source
.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
var o = other
.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
int count;
return s.Count == o.Count &&
s.All(x => o.TryGetValue(x.Key, out count) &&
count == x.Value);
}
}
wykorzystania:
string[] a = { "a", "b", "c" };
string[] b = { "c", "a", "b" };
bool containSame = a.HasSameContentsAs(b);
niektórych przypadkach zastosowanie:
inna długości (spodziewać się fałszywych)
string[] a = { "a", "b", "c" };
string[] b = { "b", "c" };
inny porządek (oczekiwać prawdziwe)
string[] a = { "a", "b", "c" };
string[] b = { "b", "c", "a" };
działa również wtedy, gdy wejścia mogą zawierać duplikatów, choć nie jest jasne, z pytaniem, czy to cecha jest pożądana, czy nie Rozważmy:
zduplikowane elementy mają taką samą liczbę (oczekiwać true)
string[] a = { "a", "b", "b", "c" };
string[] b = { "a", "b", "c", "b" };
zduplikowane elementy o różnej morfologii (oczekiwać false)
string[] a = { "a", "b", "b", "b", "c" };
string[] b = { "a", "b", "c", "b", "c" };
od X w od rw b gdzie x == y zaznaczyć x == y ale jej nie można poprawić ... nie przechowywać w zmiennej Boolean –
Czy każda tablica ma unikatowe wartości? Kiedy uważasz, że dwie tablice są takie same? czy mają te same elementy? te same elementy w tej samej kolejności? –
Czy szukasz pojedynczej odpowiedzi bool, jeśli obie są idealnie takie same lub szukasz sprawdzić, czy każdy element jest taki sam jak jego partnera. –