Verificar si las relaciones son iguales a los campos extranjeros usando LINQ CUALQUIER () -- # campo con linq campo con extension-methods camp codereview Relacionados El problema

Checking whether relations are equal to foreign fields using LINQ Any()


6
vote

problema

Español

¿Puede encontrar una manera más comprensible de escribir el siguiente forro?

  Enumerable.Range(0, relation.Fields.Count).            Any(i => relation.Fields[i] != relation.ForeignFields[i])   

¿Pero aún así preservando su brevedad?

Simplemente ponlo, quiero ciclo en relation.Fields Elementos para ver si sus elementos son uno por uno igual a #include <iostream> #include "set.h" using namespace std; int main() { Set<int> set; set.insert(4); set.insert(0); set.insert(2); set.insert(7); set.insert(0); set.insert(2); set.insert(6); set.insert(4); set.insert(12); set.insert(11); set.insert(8); set.insert(1); set.insert(5); set.insert(0); set.insert(3); set.insert(2); set.insert(7); set.insert(1); set.insert(1); set.insert(1); set.insert(9); set.insert(7); set.insert(11); set.insert(1); Set<int> set2 = set; for(Set<int>::iterator it = set2.begin(); it != set2.end(); it++) { cout << *it << ' '; } } 1 .

La razón por la que tuve que usar #include <iostream> #include "set.h" using namespace std; int main() { Set<int> set; set.insert(4); set.insert(0); set.insert(2); set.insert(7); set.insert(0); set.insert(2); set.insert(6); set.insert(4); set.insert(12); set.insert(11); set.insert(8); set.insert(1); set.insert(5); set.insert(0); set.insert(3); set.insert(2); set.insert(7); set.insert(1); set.insert(1); set.insert(1); set.insert(9); set.insert(7); set.insert(11); set.insert(1); Set<int> set2 = set; for(Set<int>::iterator it = set2.begin(); it != set2.end(); it++) { cout << *it << ' '; } } 2 es que necesito un índice, para acceder a las dos colecciones.

NOTA: Tienen seguro lo mismo.


Escribí una Método de extensión Basado en @ T3CHB0T's Respuesta

Original en ingles

Can you find a more understandable way to write the following one-liner?

Enumerable.Range(0, relation.Fields.Count).            Any(i => relation.Fields[i] != relation.ForeignFields[i]) 

but still preserving its brevity?

Simply put, I wanna cycle on relation.Fields collection to see if their string elements are one-by-one equal to relation.ForeignFields ones.

The reason I had to use Enumerable.Range is that I need an index, in order to cycle the two collections.

Note: they have for sure the same count.


I wrote an extension method based on @t3chb0t's answer

        
         
         

Lista de respuestas

7
 
vote
vote
La mejor respuesta
 

Esto no es realmente más corto, entonces, su ejemplo, pero funcionará con cualquier enumerable y no requiere un conteo / longitud para ser conocido:

  fetch5  

Creo que esto podría funcionar también si ambas colecciones están sincronizadas:

  fetch6  
 

This is not realy shorter then your example but it will work with any enumerable and does not require a count/length to be known:

var any = Fields     .Select((field, i) => new { filed, i })     .Any(x => x.field != relation.ForeignFields[x.i]) 

I think this might work as well if both collections are in sync:

var any = Fields.Zip(relation.ForeignFields, (x, y) => x != y).Any(z => z); 
 
 
         
         
9
 
vote

¿No puedes simplemente hacer secuestral?

  fetch7  
 

Can you not simply do SequenceEqual?

var list = new List<string> { "test1", "test2", "test3" }; var list2 = new List<string> { "test1", "test2", "test3" };  var areListsEqual = list.SequenceEqual(list2); 
 
 
         
         
3
 
vote

Basado en La respuesta de @ t3chb0t terminé escribiendo un método de extensión 9988777665544330 también proporciona indexación:

  public static bool Any<T>(this IEnumerable<T> enumerable, Func<T, int, bool> lambda) {     return enumerable.Select((el, ix) => new { el, ix }).Any(x => lambda(x.el, x.ix)); }   

Uso:

  relation.Fields.Any((f, ix) => f != relation.ForeignFields(ix))   

De esa manera, el código en el software principal sigue siendo conciso y comprensible.


I Escribí una versión All3 :

  public static bool All<T>(this IEnumerable<T> enumerable, Func<T, int, bool> lambda) {     return enumerable.Select((el, ix) => new { el, ix }).All(x => lambda(x.el, x.ix)); }   
 

Based on @t3chb0t's answer, I ended up writing an extension method Any that also provides indexing:

public static bool Any<T>(this IEnumerable<T> enumerable, Func<T, int, bool> lambda) {     return enumerable.Select((el, ix) => new { el, ix }).Any(x => lambda(x.el, x.ix)); } 

Use:

relation.Fields.Any((f, ix) => f != relation.ForeignFields(ix)) 

That way, code in the main software remains concise and understandable.


I wrote an All version as well:

public static bool All<T>(this IEnumerable<T> enumerable, Func<T, int, bool> lambda) {     return enumerable.Select((el, ix) => new { el, ix }).All(x => lambda(x.el, x.ix)); } 
 
 

Relacionados problema

10  Pequeña extensión de BOOST C ++ basada en Boost :: Property_Tree  ( Small c boost extension based on boostproperty tree ) 
Esta es una pequeña extensión basada en un boost::property_tree , que admite valores arbitrarios para las propiedades y serialización adecuada. Puede usarse ...

10  Ciclo a través de un iEnumerable  ( Cycle through an ienumerable ) 
He construido un método de extensión para recorrer todos los elementos de un IEnumerable comenzando en algún índice: public static IEnumerable<T> Circle<...

7  JavaScript Herencia: ¿Es correcta mi solución?  ( Javascript inheritance is my solution correct ) 
He estado desarrollando JavaScript durante unos meses, y, como ex desarrollador de Java, necesitaba una forma sencilla de realizar la herencia de la clase. ...

6  Método LINQ que selecciona un elemento basado en uno anterior  ( Linq method that selects an item based on previous one ) 
Mi requisito es implementar una forma de filtrar una colección de elementos basados ​​en un valor de uno anterior. Por ejemplo, solo para seleccionar un númer...

8  Convertir objetos para escribir bool  ( Converting objects to type bool ) 
Se está utilizando el siguiente método de extensión en nuestra base de código: public static bool ToBool(this object src) { return src != null && ((str...

10  Encapsulando el código de prueba de prueba común. ¿Es este un patrón conocido? ¿Es bueno o malo?  ( Encapsulating common try catch code is this a known pattern is it good or bad ) 
En un esfuerzo por reducir la duplicación de código, a menudo uso y he usado este estilo para capturar el manejo de excepciones en un límite de una aplicación...

4  Extensiones primitivas: reemplaza los métodos primitivos estáticos  ( Primitive extensions replaces static primitive methods ) 
Me molestó tener que hacer cosas como string.IsNullOrEmpty(myString) Cuando parecía que 9988776665544337 es suficiente. Por lo tanto, escribí una pequeña ...

8  Capitalizar palabras en oración  ( Capitalize words in sentence ) 
public static class StringHelpers { public static string CapitalizeEachWord(this string sentence) { CultureInfo cultureInfo = Thread.CurrentT...

2  Formateo de un precio en SWIFT usando una extensión vs. una clase  ( Formatting a price in swift using an extension vs a class ) 
Tengo un precio como un Double , que debería formatearlo como un String . ¿Debo usar una extensión en lugar de clase clásica para encapsular "Formater", "...

7  Métodos de extensión, ¿es esto demasiado sucio?  ( Extension methods is this too dirty ) 
Bloqueado . Esta pregunta y sus respuestas son bloqueadas porque la pregunta es off-topic pero tiene importancia histórica. Actualmente no está a...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos