是否可以阻止在特定索引之后设置一个具有值的列表,快?
以下逻辑如何用C#编写?如果我能做同样的事情,我可以使用不同的收藏品。
List<int> mylist = new List<int>(10);
int index = 3;
int value = 11;
mylist.SetValuesafterIndex(index, value);
编辑:
澄清:我的意思是,我希望索引3到9包含值11
答案 0 :(得分:1)
List<T>
不提供您想要的方法。所以,虽然这是一个明显的陈述,你可以写得很好:
for (int i = index; i < list.Count; i++)
list[i] = value;
唯一想到的选择是使用RemoveRange
从Index
删除所有项目到最后,然后致电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)));