如何在Enumerable.Range中获得上界
本文关键字:Range Enumerable | 更新日期: 2023-09-27 18:15:41
我正试图获得linqs可枚举范围的上限,例如:
Enumerable.Range(0, 3).Select(x => "index: " + x + " Max: ").ToList();
列表应该有:
index: 0 Max: 3
index: 1 Max: 3
index: 2 Max: 3
...
你不能,不完全可以。你的lambda函数将始终在实例的作用域中执行。
你可以这样做:
var range = Enumerable.Range(0, 3);
range.Select(x => "index: " + x + " Max: " + range.Max()).ToList();
但是你也可以这样做:
var range = Enumerable.Range(0, 3);
var max = range.Max();
range.Select(x => "index: " + x + " Max: " + max).ToList();
BTW,由于您使用的范围从0 ([ 0, 1, 2 ]
)开始,最大值将是2,而不是3。你要不要换成.Count()
?
你不能。Select
的输入可以是任何序列,它可能根本没有上界(好吧,显然该值不能大于Int32.MaxValue
,但除此之外,没有办法知道)。
在您的例子中,由于Enumerable.Range
的参数是硬编码的,显然您可以推断出最大值,即start + count - 1 = 2
。注意,3是计数,而不是最大值;它恰好是唯一的上界,但只是因为起始值是0。
var range = Enumerable.Range(0, 3);
var max = range.Max();
var s = range.Select(x => string.Format("Index: {0}, Max: {1}", x, max));