求一个LINQ的写法!

Sammo 2011-05-18 09:15:27
decimal[] X=new decimal[10];
假设有一组数(X):11.8,12,13.3,14,15.6,16,17,18.8,19,20.5。
根据公式 Y=(Y'+X)/2,求出所有的Y,其中Y'是指上一组求出的Y值,根据要求得出Y的结果如下Y[10]:
Y[0]=X[0]=11.8 //第一组没有上一组的Y值Y',所以直接赋当前的X值11.8。
Y[1]=(X[1]+Y')/2=(12+11.8)/2=11.9
Y[2]=(X[2]+Y')/2=(13.3+11.9)/2=12.6
Y[3]=(X[3]+Y')/2=(14+12.6)/2=13.3
Y[4]=(X[4]+Y')/2=(15.6+13.3)/2=14.45
Y[5]=(X[5]+Y')/2=(16+14.45)/2=15.23
Y[6]=(X[6]+Y')/2=(17+15.23)/2=16.12
Y[7]=(X[7]+Y')/2=(18.8+16.12)/2=17.46
Y[8]=(X[8]+Y')/2=(19+17.46)/2=18.23
Y[9]=(X[9]+Y')/2=(20.5+18.23)/2=19.37


我想使用LINQ的办法求出,我自己写了一下,只会写出求两天的平均值,但不知道怎么能在LINQ里,使用上一组的Y值:Y'。

var X = new decimal[] { 11.8,12,13.3,14,15.6,16,17,18.8,19,20.5 };
var Y = (from i in Enumerable.Range(0, X.Length) select X.Skip(i).Take(2).Sum() / 2).ToArray();
...全文
111 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Sammo 2011-05-18
好的,谢谢!
  • 打赏
  • 举报
回复
threenewbee 2011-05-18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var X = new decimal[] { 11.8M, 12, 13.3M, 14, 15.6M, 16, 17, 18.8M, 19, 20.5M };
decimal y0 = X[0];
var Y = Enumerable.Range(1, X.Length - 1).Select(i => { decimal x = (X[i] + y0) / 2; y0 = x; return Math.Round(x, 2); }).ToArray();
Y.ToList().ForEach(x => Console.WriteLine(x));
}
}
}
  • 打赏
  • 举报
回复
threenewbee 2011-05-18
[Quote=引用 2 楼 sammo 的回复:]
引用 1 楼 caozhy 的回复:

C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[]……
[/Quote]
一样啊。

总之用 LINQ 表达式不是很灵活,要掌握LINQ操作函数的使用。

还有问题你具体提出来再说。

你可以多请教q107770540版。
  • 打赏
  • 举报
回复
Sammo 2011-05-18
[Quote=引用 1 楼 caozhy 的回复:]

C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
……
[/Quote]
谢谢caozhy!您的写法没有像我那样使用i变量的,若我想加入另外一个变量一起运算时,怎么解决呢?比如说,我还有另外一个变量decimal X1 = new decimal[10] ,我想使用X和X1一起进行运算。再次感谢技术支持!学习LINQing....
  • 打赏
  • 举报
回复
threenewbee 2011-05-18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var X = new decimal[] { 11.8M, 12, 13.3M, 14, 15.6M, 16, 17, 18.8M, 19, 20.5M };
decimal y0 = X[0];
var Y = X.Select(y => { decimal x = (y + y0) / 2 ; y0 = x; return Math.Round(x, 2); }).Skip(1).ToArray();
Y.ToList().ForEach(x => Console.WriteLine(x));
}
}
}


11.9
12.6
13.3
14.45
15.22
16.11
17.46
18.23
19.36
  • 打赏
  • 举报
回复
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2011-05-18 09:15
社区公告

让您成为最强悍的C#开发者