我有一个这样的清单:
property = Enumerable.Range(0, 999).Select(i => 0).ToList();
所有值都是0.我想在某些范围内更改某些值。例如;
(0,333)=必须为0
(334,666)=必须是1
(667,999)=必须为2
有没有办法在Linq中执行此操作?
提前致谢。
答案 0 :(得分:4)
var query = Enumerable.Range(0, 999).Select((n, index) =>
{
if (index <= 333)
return 0;
else if (index <= 666)
return 1;
else
return 2;
});
答案 1 :(得分:2)
您可以使用此扩展方法:
public static class MyExtensions
{
public static void SetRangeValues<T>(this IList<T> source, int start, int end, T value)
{
if (start > 0 && end < source.Count)
{
for (int i = start; i <= end; i++)
{
source[i] = value;
}
}
}
}
用法:
list.SetRangeValues(0,333,0);
list.SetRangeValues(334,666,1);
答案 2 :(得分:1)
我认为你可以使用整数除法技巧。
var property = Enumerable.Range(0, 999).Select(i => i/333).ToList();
一个简单的测试用例:
Enumerable.Range(0, 9).Select(x => x / 3).ToList().ForEach(Console.WriteLine);