¿Cómo puede obtener una búsqueda de una Unión de 2 búsquedas anteriores? Parece que a = a.Union(b)
no funciona para ellos.¿Cómo obtener una búsqueda como Unión de 2 búsquedas anteriores?
7
A
Respuesta
10
Si tiene las listas originales de las que provienen las búsquedas, podría ser más fácil. También podría ser más fácil si usó Dictionary
s de Lists
en lugar de búsquedas. Sin embargo, aún es posible fusionar dos objetos de búsqueda en un nuevo objeto. La idea básica es recuperar los valores originales de las búsquedas y luego crear una nueva búsqueda del conjunto concatenado de ambos.
var a = new[] {"apple","aardvark","barn"};
var b = new[] {"baboon", "candy", "cork"};
var al = a.ToLookup (x => x[0]);
var bl = b.ToLookup (x => x[0]);
var cl = al.Concat(bl).SelectMany(x => x).ToLookup(x => x[0]);
Si no conoce la función de selector de llave original, puede usar esta variante.
var cl = al.Concat(bl)
.SelectMany(lookup => lookup.Select(value => new { lookup.Key, value}))
.ToLookup(x => x.Key, x => x.value);
0
se puede considerar una forma más flexible para cualquier recuento de matriz/lista. Por ejemplo, cree las operaciones de búsqueda de sinónimo:
public ILookup<string, string> GetSynonyms()
{
var data = new[]
{
new[] {"hello", "hi there", "привет"},
new[] {"bye", "Tchau", "Adios"},
new[] {"hello", "hi there"}
};
return data
.SelectMany(words => words.SelectMany(
keyWord => words.Where(word => word != keyWord).Select(word => new Tuple<string, string>(item1: keyWord, item2: word))))
.Distinct(comparer: new DelegateComparer<Tuple<string, string>>(equals: Equals, hashCode: v => v.GetHashCode()))
.ToLookup(keySelector: k => k.Item1, elementSelector: e => e.Item2);
}
public sealed class DelegateComparer<T> : IEqualityComparer<T>
{
private readonly Func<T, T, bool> _equals;
private readonly Func<T, int> _hashCode;
public DelegateComparer(Func<T, T, bool> equals, Func<T, int> hashCode)
{
_equals = equals;
_hashCode = hashCode;
}
public bool Equals(T x, T y)
{
return _equals(x, y);
}
public int GetHashCode(T obj)
{
return _hashCode != null ? _hashCode(obj) : obj.GetHashCode();
}
}
Cuestiones relacionadas
- 1. Un conjunto algoritmo de búsqueda de unión
- 2. Duplicados usando búsqueda de unión izquierda
- 3. SELECCIONE LA UNIÓN como DISTINCT
- 4. Obtener claves de una búsqueda
- 5. en codeigniter como hago una unión con una cláusula where
- 6. ¿Cómo inicializar una unión?
- 7. 2 Seleccione o 1 consulta de unión?
- 8. Riak link-walking como una unión?
- 9. unión dinámica parece como una mentira
- 10. ¿Cómo realizar búsquedas binarias en NSArray?
- 11. obtener valores de matriz anteriores en foreach
- 12. ¿Cómo funcionan las búsquedas de hash de diccionario de Python?
- 13. Búsqueda de directorios anteriores a N días en HDFS
- 14. búsquedas en múltiples campos de Lucene.net
- 15. ¿Búsquedas de comodín usando el controlador dismax?
- 16. de búsqueda de rutas en Symfony 2
- 17. cómo obtener publicaciones y títulos posteriores/anteriores en wordpress
- 18. Convertidor de unión como clase interna?
- 19. ¿Cómo obtener la ruta entre 2 nodos usando la búsqueda de primer orden?
- 20. Haskell: cómo evaluar una cadena como "1 + 2"
- 21. Cómo consulto una tabla de unión
- 22. JavaFX 2 como una dependencia de Maven
- 23. Django Categoría y búsquedas de subcategoría
- 24. Muchas o muchas búsquedas en Django
- 25. ¿Cómo ordenar una búsqueda?
- 26. Crear búsquedas de campo personalizadas en Django
- 27. ¿Beneficios de la búsqueda manual sobre la unión en LINQ?
- 28. Optimización de las búsquedas de tabla virtual
- 29. etiquetas de búsqueda como stackoverflow?
- 30. Búsqueda de iFrame anidado utilizando Selenium 2
¿Qué pasa si no tengo referencias a cualquiera de las colecciones utilizadas en la creación LookUp? – myWallJSON
Luego puede usar el código que publiqué. – recursive
Estoy tratando de hacer lo mismo que el OP sin embargo, el código anterior no me ayuda, el hecho de que esté repitiendo la definición de KeySelector en lugar de usar grouping.Key para crear las búsquedas. Esperaba un código más genérico utilizando las claves de cada búsqueda entrante. –