Czy można zsumować wszystkie wartości na listach List za pomocą tylko linq ? Mam kod, który działa, ale może istnieje wyjście z LINQ, które nie wymaga podwójnej pętli foreach totalSum = ...

0
Ktas 27 czerwiec 2021, 14:00

4 odpowiedzi

Najlepsza odpowiedź

Użyj SelectMany i pomoże spłaszczyć sekwencję w jedną sekwencję:

var totalSum= listOfLists.SelectMany(x => x).Sum();
4
codeninja.sj 27 czerwiec 2021, 11:06

Nie testowałem, ale myślę, że możesz napisać:

double sum = listOfLists.Select(innerList=>innerList.Sum()).Sum();

Metoda Select zwróci IEnumerable ze wszystkimi sumami podlist, a następnie zsumuje je.

(Napisałem to z mojego telefonu, więc przepraszam, jeśli są problemy w kodzie)

1
SagiZiv 27 czerwiec 2021, 11:07

Spróbuj tego

        List<List<double>> lstDouble = new List<List<double>>();


        List<double> items1 = new List<double>() { 1.231, 4.561, 10.891 };
        List<double> items2 = new List<double>() { 1.232, 4.562, 20.892 };
        List<double> items3 = new List<double>() { 1.233, 4.563, 7.893 };
        List<double> items4 = new List<double>() { 1.234, 30.564, 7.894 };
        List<double> items5 = new List<double>() { 40.235, 4.565, 7.895 };

        lstDouble.Add(items1);
        lstDouble.Add(items2);
        lstDouble.Add(items3);
        lstDouble.Add(items4);
        lstDouble.Add(items5);

        var sum = lstDouble.SelectMany(x => x).Sum();
1
Amit Verma 27 czerwiec 2021, 11:09

Możesz to zrobić za pomocą AsQueryable() linq!

public class Program
{
    public static void Main()
    {
        double totalSum = 0;
        List<int> list = new List<int> { 99, 34, 77, 75, 87,77, 35, 88};
        var listOfLists = list.Where(a => a == 77).ToList();
        int res = listOfLists.AsQueryable().Sum();
       
        Console.WriteLine(res);
    }
}
1
Divyesh_08 27 czerwiec 2021, 11:15