Tengo 3 objetos de lista y los necesito para que todos tengan el mismo conteo ... o todos estén vacíos (Count = 0).

Si una o más listas tienen un recuento mayor / menor que las otras listas, entonces necesito captar eso.

¿Hay una manera más eficiente de escribir esto que hacer múltiples declaraciones if?

public static bool ThreeListComparison(List<string> lstOne,
    List<int> lstTwo, List<decimal> lstThree)
{
    var firstLstCount = lstOne.Count;
    var secondLstCount = lstTwo.Count;
    var thirdLstCount = lstThree.Count;

    if ((firstLstCount == 0 || secondLstCount == 0 || thirdLstCount == 0) && (firstLstCount != 0 || secondLstCount == 0) &&
        (firstLstCount == 0 || secondLstCount != 0)) return true;

    if (firstLstCount == 0 && secondLstCount != 0) return false;

    if (firstLstCount != 0 && secondLstCount == 0) return false;

    if (firstLstCount == 0 || secondLstCount == 0) return true;

    return firstLstCount == secondLstCount;
}

Esto es lo que comencé con dos listas, pero después de escribirlo, espero una mejor manera.

Cualquier ayuda es apreciada.

1
Grizzly 7 sep. 2018 a las 17:57

5 respuestas

La mejor respuesta

Como cero es un número entero perfectamente válido, comparar las tres listas para contar cero es redundante. Puede confiar en la propiedad transitiva de igualdad para hacer la verificación con una simple declaración &&:

return lstOne.Count == lstTwo.Count && lstTwo.Count == lstThree.Count;
3
dasblinkenlight 7 sep. 2018 a las 15:03

¿Qué tal una manera simple de verificar un número ilimitado de listas usando LINQ ?:

public static bool ListComparison(params List<string>[] lists)
{
    return lists.All(l => l.Count == lists[0].Count);
}
0
John 7 sep. 2018 a las 15:05

Reste firstListCount de secondListCount y thirdListCount. Si los tres son cero, entonces todos coinciden. Por ejemplo:

return new[] { 0, secondLstCount - firstLstCount, thirdLstCount - firstLstCount }.All(x => x == 0)
0
JakeSteam 7 sep. 2018 a las 15:28
var arr = new[] { firstLstCount , secondLstCount , thirdLstCount};

Para verificar si son del mismo recuento

return arr.Distinct().Count() == 1
0
Antoine V 7 sep. 2018 a las 15:08
using System.Linq

Haga una serie de listas:

List<string>[] lists = new List<string>[] { firstLst, secondLst, thirdLst };

Luego calcule el tamaño máximo de matriz:

int maxSize = lists.Max(list => list.Count);

Y luego responda si alguno de ellos es de diferente tamaño:

if(!lists.All(list => list.Count == maxSize))
{
    //do some stuff
}
0
RaceRalph 7 sep. 2018 a las 15:06