【问题标题】:Move First 10 List Items to Another Item List将前 10 个列表项移动到另一个项列表
【发布时间】:2013-09-09 19:38:10
【问题描述】:

我有List<Item> OldItems = new List<Item>,我想将OldItems 的前10 个项目移动到NewItems,即List<Item> NewItems= new List<Item>

有类似的吗?

NewItems.AddRange(OldItems.<First10Items>);
OldItems.Delete(<First10Items>);

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    试试这个:

    NewItems.AddRange(OldItems.Take(10));
    OldItems = OldItems.Skip(10).ToList();
    

    替代:

    NewItems.AddRange(OldItems.Take(10));
    OldItems.RemoveRange(0,10);
    

    Take 将从您的列表look here 中获取x 的第一个项目。 Skip 将跳过列表look here 中的x 元素。如果您将使用列表reference,RemoveRange 是一个替代选项。

    正如马修所说,第二个选项不会创建新列表并就地删除,所以它是首选。

    【讨论】:

    • 那不会编译。 OldItems 是一个 List,所以不能将 Skip() 的结果赋值给它。
    • 糟糕,正在修复它。我没有看定义。谢谢。
    • 你还需要一个OldItems.RemoveRange(0, 10)
    • 我认为这里的问题可能是您没有从 OldItems 中删除任何项目 - 相反,您创建了一个新列表,其中删除了项目并将 OldItems 分配给新列表.我认为 OP 可能想要就地删除(尽管他没有明确要求)。但是,如果其他任何东西也通过不同的引用引用了 OldItems,它仍然会看到旧的未修改列表。
    • @MatthewWatson 好点,谢谢。我用RemoveRange 编写了第二个代码 sn-p,这将解决这个问题。
    【解决方案2】:

    你可以这样做:

    var NewItems = OldItems.GetRange(0, 10);
    OldItems.RemoveRange(0, 10);
    

    (这不使用 Linq)

    【讨论】:

    • 我不想粗鲁之类的,但是有linq标签,所以首选linq回答:)
    • @wudzik 那将是一个XY 的问题,你不觉得吗?
    • 你说得对,但现在是星期一,对吧? :) 感谢您的参考。
    【解决方案3】:

    试试这个

    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
    

    【讨论】:

      【解决方案4】:

      你可以使用

      GetRange(int index, int count); RemoveRange(int index, int count);
      

      实现这一点。

      【讨论】:

        【解决方案5】:
        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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多