C# 将前10个列表项移动到另一个列表项
我有C# 将前10个列表项移动到另一个列表项,c#,linq,C#,Linq,我有List OldItems=new List,我想将OldItems的前10项移动到NewItems,即List NewItems=new List 有类似的东西吗 NewItems.AddRange(OldItems.<First10Items>); OldItems.Delete(<First10Items>); NewItems.AddRange(OldItems.); Delete(); 试试这个: NewItems.AddRange(OldItems.Ta
List OldItems=new List
,我想将OldItems
的前10项移动到NewItems
,即List NewItems=new List
有类似的东西吗
NewItems.AddRange(OldItems.<First10Items>);
OldItems.Delete(<First10Items>);
NewItems.AddRange(OldItems.);
Delete();
试试这个:
NewItems.AddRange(OldItems.Take(10));
OldItems = OldItems.Skip(10).ToList();
备选方案:
NewItems.AddRange(OldItems.Take(10));
OldItems.RemoveRange(0,10);
Take将从列表中选取x
第一项。
Skip将跳过列表中的x
元素。如果要使用列表,RemoveRange是一个可选选项
正如Matthew所说,第二个选项不会创建新列表并在适当的位置执行删除操作,因此它更可取。您可以:
var NewItems = OldItems.GetRange(0, 10);
OldItems.RemoveRange(0, 10);
(这不使用Linq)您可以使用
GetRange(int index, int count); RemoveRange(int index, int count);
要实现此功能,请尝试此功能
List<Item> oldItems = new List<Item>();
List<Item> newItems = new List<Item>();
newItems.AddRange(oldItems.Take(10));//add first 10 items to new list
oldItems.RemoveRange(0, 10);//remove first 10 items from old list
List oldItems=new List();
List newItems=新列表();
newItems.AddRange(oldItems.Take(10))//将前10项添加到新列表中
旧项目。删除范围(0,10)//从旧列表中删除前10项
列表checkForNull=新列表();
List newList=新列表();
对于(int i=0;i<10;i++)
{
checkForNull.Add(Convert.ToString(i));
}
对于(int i=10;i<20;i++)
{
newList.Add(Convert.ToString(i));
}
checkForNull.AddRange(newList.Take(5));
newList.RemoveRange(0,5);
无法编译。OldItems是一个列表,因此无法将Skip()的结果分配给它。哎呀,修复了它。我还没看过定义。谢谢。您还需要一个OldItems.RemoveRange(0,10)
我想这里的问题可能是您没有从OldItems
中删除任何项目-相反,您创建了一个新列表,其中删除了项目并将OldItems
分配给新列表。我认为OP可能希望就地移除(尽管他没有明确要求)。但是,如果其他任何东西也通过不同的引用引用了OldItems,它仍然会看到旧的未修改列表。@MatthewWatson说得好,谢谢。我用RemoveRange
制作了第二个代码片段,它将解决这个问题。我不想粗鲁,或者其他什么,但是有linq
标记,所以更喜欢linq答案:)@wudzik这会是个问题,你不觉得吗?你是对的,但今天是星期一,对吗?:)谢谢你的参考。
List<string> checkForNull = new List<string>();
List<string> newList = new List<string>();
for (int i = 0; i < 10; i++)
{
checkForNull.Add(Convert.ToString(i));
}
for (int i = 10; i < 20; i++)
{
newList.Add(Convert.ToString(i));
}
checkForNull.AddRange(newList.Take(5));
newList.RemoveRange(0, 5);