如何使用Linq更改整个列表中的某些范围值

时间:2014-01-31 11:36:50

标签: c# linq range

我有一个这样的清单:

property = Enumerable.Range(0, 999).Select(i => 0).ToList();

所有值都是0.我想在某些范围内更改某些值。例如;

(0,333)=必须为0

(334,666)=必须是1

(667,999)=必须为2

有没有办法在Linq中执行此操作?

提前致谢。

3 个答案:

答案 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);