Эффективный способ сравнения графов 3 разных списков - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть 3 объекта списка, и мне нужно, чтобы все они имели одинаковое количество .. или все были бы пустыми (Count = 0).

Если один или несколько списков имеют большее / меньшее количество, чем другие списки, то мне нужно это уловить.

Есть ли более эффективный способ написать это, чем делать несколько операторов 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;
}

Это то, что я начал с двух списков, но после написания этого я надеюсь на лучший путь.

Любая помощь приветствуется.

Ответы [ 5 ]

0 голосов
/ 07 сентября 2018

Вычтите firstListCount из secondListCount и thirdListCount. Если все три равны нулю, то все они совпадают. Например:

return new[] { 0, secondLstCount - firstLstCount, thirdLstCount - firstLstCount }.All(x => x == 0)
0 голосов
/ 07 сентября 2018
using System.Linq

Создайте массив списков:

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

Затем рассчитайте максимальный размер массива:

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

А затем ответьте, если какой-либо из них имеет другой размер:

if(!lists.All(list => list.Count == maxSize))
{
    //do some stuff
}
0 голосов
/ 07 сентября 2018

Так как ноль является совершенно допустимым целым числом, сравнение всех трех списков для нулевого счета является излишним. Вы можете положиться на транзитивное свойство равенства, чтобы выполнить проверку с помощью простого оператора &&:

return lstOne.Count == lstTwo.Count && lstTwo.Count == lstThree.Count;
0 голосов
/ 07 сентября 2018

А как насчет простого способа проверки неограниченного количества списков с помощью LINQ?:

public static bool ListComparison(params List<string>[] lists)
{
    return lists.All(l => l.Count == lists[0].Count);
}
0 голосов
/ 07 сентября 2018
var arr = new[] { firstLstCount , secondLstCount , thirdLstCount};

Чтобы проверить, равны ли они по количеству

return arr.Distinct().Count() == 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...