powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [Linq] посчитать сумму произведений массива
9 сообщений из 9, страница 1 из 1
[Linq] посчитать сумму произведений массива
    #35909950
Фотография bbbdum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как проще посчитать такое
Код: plaintext
1.
2.
3.
4.
var a = new double[5]
var и = new double[5]
for(int i=0;i<a.Length,i++)
yield return a[i]*b[i];
на линке первое, что пришло в голову, выглядит так

Код: plaintext
1.
2.
int i=0;
a.Aggregate(0,(sum,item)sum+item*b[i++]);
как можно без лишней переменной (i) посчитать сумму произведений кажого элемента массива?
...
Рейтинг: 0 / 0
[Linq] посчитать сумму произведений массива
    #35910096
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp(sum(log(value)) ?
...
Рейтинг: 0 / 0
[Linq] посчитать сумму произведений массива
    #35910099
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой... не дочитал :)
...
Рейтинг: 0 / 0
[Linq] посчитать сумму произведений массива
    #35910285
gp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
A.Select((a,i)=>a*B[i]).Sum()

Это те же яйца, но лаконичнее, и нет внешней переменной.

А вот метод для взрослых, будет работать для любых IEnumerable, не только с индексом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
[TestMethod]
		public void TestMethod1()
		{
			// setup
			var A = new [] {1, 3, 1};
			var B = new[] {2, 1, 5};

			// act
			var actual = JoinByPosition(A, B, (a, b) => a*b).Sum();
					
			// assert
			Assert.AreEqual(10, actual);
		}
		
		
		public IEnumerable<TResult> JoinByPosition<Ta,Tb, TResult>(IEnumerable<Ta> qa, IEnumerable<Tb> qb, Func<Ta,Tb,TResult> makePair)
		{
			using (var ia = qa.GetEnumerator())
			using (var ib = qb.GetEnumerator())
				while (ia.MoveNext() && ib.MoveNext())
					yield return makePair(ia.Current, ib.Current);
		}

нет дурацких вопросов, есть дурацкие ответы
...
Рейтинг: 0 / 0
[Linq] посчитать сумму произведений массива
    #35910438
gp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще есть замечательный Range, который заменяет for(;;)

Код: plaintext
Enumerable.Range(0,N).Select(i=>A[i]*B[i]).Sum()

Это лучше for хотябы тем, что можно сделать

Код: plaintext
ParallelEnumerable.Range(0,N).Select(i=>A[i]*B[i]).Sum()

При больших N у меня получилось больше чем в 2 раза быстрее на CoreDuo
Этот факт я не могу объяснить - возможно ParallelEnumerable как-то сильно оптимизирован, помимо того, что работает в несколько ниток.

нет дурацких вопросов, есть дурацкие ответы
...
Рейтинг: 0 / 0
[Linq] посчитать сумму произведений массива
    #35910598
Фотография bbbdum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gp,

Enumerable.Range долго писать, я бы предпочет что -нибудь в таком стиле

repeater(N,i=>a[i]*b[i]) или вообще так rep(N){sum+=a[i]*b[i];}
...
Рейтинг: 0 / 0
[Linq] посчитать сумму произведений массива
    #35910815
gp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напишите свое расширение:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public static class ScalarSequenceExtensions
{
 public static double SumAll(this int N, Func<int,double> elt)
 {
   Enumerable.Range(0, N).Select(i=>elt(i)).Sum();
 }
}

N.SumAll(i=>a[i]*b[i]);


А по поводу краткости - фигней не страдайте, потренеруйтесь печатать.


нет дурацких вопросов, есть дурацкие ответы
...
Рейтинг: 0 / 0
[Linq] посчитать сумму произведений массива
    #35910816
gp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори - return забыл

нет дурацких вопросов, есть дурацкие ответы

Модератор: Тема перенесена из форума "C#.NET".
...
Рейтинг: 0 / 0
[Linq] посчитать сумму произведений массива
    #35912869
gp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно, извиняюсь, но это никакого отношения к
ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM
не имеет.

Видимо, следовало назвать форум
ADO.NET, LINQ to SQL, Entity Framework, NHibernate, DAL, ORM

А топик чисто C#

нет дурацких вопросов, есть дурацкие ответы
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / [Linq] посчитать сумму произведений массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]