Estoy usando diccionario para almacenar ID, otherID y valor de bool. Lamentablemente, compara la referencia de matriz, por lo tanto, no puedo usarla. ¿Hay alguna manera de cómo tener una matriz como clave, pero comparar sus valores en lugar de referencia? GraciasDiccionario <int [], bool> - compare los valores en la matriz, ¿no es referencia?
Respuesta
Puede usar el Comparer property del diccionario para establecerlo en un comparador personalizado creado por usted.
EDIT: en realidad la propiedad es de solo lectura, lo siento. Definitivamente, usted debe utilizar el constructor adecuado:
class IntArrayComparer : IEqualityComparer<int[]> {
public bool Equals(int[] x, int[] y) {
if (x.Length != y.Length) {
return false;
}
for (int i = 0; i < x.Length; ++i) {
if (x[i] != y[i]) {
return false;
}
}
return true;
}
public int GetHashCode(int[] obj) {
int ret = 0;
for (int i = 0; i < obj.Length; ++i) {
ret ^= obj[i].GetHashCode();
}
return ret;
}
}
static void Main(string[] args) {
Dictionary<int[], bool> dict = new Dictionary<int[], bool>(new IntArrayComparer());
}
Usted puede tratar de implementar IEqualityComparer<int[]> y luego pasar una instancia de la misma al proper constructor.
Hay básicamente dos maneras de hacerlo:
- Crear un comparador que implementa
IEqualityComparable<int[]>
, que se pasa al constructor del diccionario. - Crea una clase de clave que encapsula la matriz de enteros e implementa
IEquatable<T>
.
No hay nada malo con la respuesta de orsogufo, pero quería señalar que si tiene .NET 3.5, se puede implementar un ArrayValueComparer con mucho menos código, y al mismo tiempo hacer que sea genérico, por lo que puede compare los valores de cualquier tipo de matriz, y no solo las matrices de enteros. Para el caso, podría hacer que funcione fácilmente con cualquier IEnumerable, y no solo con matrices.
using System.Collections.Generic;
using System.Linq;
class ArrayValueComparer<T> : IEqualityComparer<T[]>
{
public bool Equals(T[] x, T[] y)
{
return x.SequenceEqual(y, EqualityComparer<T>.Default);
}
public int GetHashCode(T[] obj)
{
return obj.Aggregate(0, (total, next) => total^next.GetHashCode());
}
}
static void Main(string[] args)
{
var dict = new Dictionary<int[], bool>(new ArrayValueComparer<int>());
}
- 1. Compare int y unsigned int
- 2. map <int,int> valores predeterminados
- 3. Multiplicando todos los valores en IEnumerable <int>
- 4. Convertir valores de diccionario en matriz
- 5. Javascript compare 3 valores
- 6. ¿Convertir Diccionario <String,Int> al Diccionario <String, SomeEnum> using LINQ?
- 7. ¿Cuál es el equivalente de map <int, vector <int>> en Python?
- 8. Agregar elementos a un diccionario <int, List <int>>
- 9. ¿Cómo se configuran los valores de una matriz a los valores de otra matriz en Java?
- 10. 'Convertir' Diccionario <string,int> en la Lista <object>
- 11. convertir un IOrderedEnumerable <KeyValuePair <string, int>> en un diccionario <string, int>
- 12. Navegue por el diccionario <string, int> C#
- 13. Los valores por defecto en la matriz
- 14. Cambiar valores de matriz en un diccionario de VBA
- 15. Cómo calcular la suma de los valores en std :: vector <int>
- 16. Diccionario de valores múltiples
- 17. C# Expandir lista plana <T> al diccionario <T, ICollection <int>>
- 18. ¿Cuál es la mejor manera de establecer todos los valores en un diccionario de C# <string,bool>?
- 19. Cómo eliminar valores negativos de una lista <int>?
- 20. ¿Cómo cambiar todos los valores en un diccionario <string, bool>?
- 21. ¿Cómo implementar una matriz asociativa (no un diccionario) en Python?
- 22. ¿Cómo hacer referencia a los elementos en el diccionario <cadena, cadena> por índice entero?
- 23. Cómo actualizar todos los valores en un Diccionario <string, bool>
- 24. Clasificar matriz en el diccionario
- 25. lista <int> convertir a int []
- 26. ¿cuál es la diferencia entre la lista <> y el diccionario <> en C#
- 27. convertir IQueryable <int> a <int>
- 28. ¿Cómo hago referencia a valores de matriz dentro de string.Format?
- 29. Convierte IEnumerable <int> en int []
- 30. C#: los valores del diccionario para la conversión hashset
Dicrionary? ¿De Verdad? LOL. – abelenky