好吧,标题很丑,但问题很简单:
我有一个WPF控件,我想在其中显示地块线。我的“视口”有它的限制,这些限制(例如,对象坐标中的底部和顶部值)是doubles
。
因此,我希望以每5的倍数绘制一条线。如果我的视口从-8.3到22.8,我将得到[-5, 0, 5, 10, 15, 20]
。
我想使用LINQ,它似乎是自然的候选人,但无法找到一种方法...
我的设想大致如下:
int nlines = (int)((upper_value - lower_value)/step);
var seq = Enumerable.Range((int)(Math.Ceiling(magic_number)), nlines).Select(what_else);
给定值为(double)lower_value
、(double)upper_value
和(int)step
。
5条答案
按热度按时间kokeuurv1#
Enumerable.Range应该可以做到这一点:
kxe2p93d2#
请尝试以下代码:
EDIT此代码适用于
lower_value
的所有负值和可被step
整除的正值。要使其也适用于所有其他正值,应应用以下更正:rxztt3cl3#
第一个问题是确定距离起点最近的步长值因子。一些简单的算法可以推导出该值:
然后创建一个范围内给定值的所有因子的序列,迭代器块非常适合:
如果你有Generate method from MoreLinq,那么你可以在没有显式迭代器块的情况下写这个:
7gs2gvoe4#
为了避免必须枚举 * 每个 * 数字,您必须在LINQ之外:
uoifb46i5#
我对代码做了一些调整。