在索引之后使用一个值分配列表

时间:2014-01-22 23:45:58

标签: c# list

是否可以阻止在特定索引之后设置一个具有值的列表,快?

以下逻辑如何用C#编写?如果我能做同样的事情,我可以使用不同的收藏品。

List<int> mylist = new List<int>(10);

int index = 3;
int value = 11;
mylist.SetValuesafterIndex(index, value);

编辑:

澄清:我的意思是,我希望索引3到9包含值11

4 个答案:

答案 0 :(得分:1)

List<T>不提供您想要的方法。所以,虽然这是一个明显的陈述,你可以写得很好:

for (int i = index; i < list.Count; i++) 
    list[i] = value;

唯一想到的选择是使用RemoveRangeIndex删除所有项目到最后,然后致电AddRange添加新值。

由于您将性能定为问题,因此您应该根据实际使用场景对这些选项进行一些测量。

答案 1 :(得分:0)

尝试以下

mylist[index] = value;

目前还不清楚您是希望它位于index还是index + 1。只需根据需要调整上述内容

答案 2 :(得分:0)

您可以编写如下通用方法:

 static void SetRangeValues<T>(List<T> list,int start,int end,T value)
 {
       if(end > list.Count() || start < 0) 
           throw new ArgumentOutOfRangeException();

        for(int i=start;i<end;i++)
        {
            list[i] = value;
        }
 }

你可以像这样使用它:

var list = new List<int>();
list.AddRange(Enumerable.Range(0,10));

Console.WriteLine("Before: ");
list.ForEach(Console.WriteLine);

SetRangeValues(ref list, 3, 10, 2000);

Console.WriteLine("After: ");
list.ForEach(Console.WriteLine);

// Output:

Before:
0
1
2
3
4
5
6
7
8
9
After:
0
1
2
2000
2000
2000
2000
2000
2000
2000

如果要将值设置到列表末尾,只需将list.Count作为end参数传递:

SetRangeValues(list, 3, list.Count(), 2000);

答案 3 :(得分:0)

对性能不太确定,但一行答案可能是:

myList.AddRange(Enumerable.Repeat(0, index).Concat(Enumerable.Repeat(value, 10 - index)));