【问题标题】:Copying a portion of a list to a new list将列表的一部分复制到新列表
【发布时间】:2010-10-29 22:22:20
【问题描述】:

大家好。有没有办法只将一个(或者更好的是,二维)字符串列表的一部分复制到一个新的临时字符串列表中?

【问题讨论】:

    标签: c# list string


    【解决方案1】:

    尽管 LINQ 确实使这变得简单且比列表更通用(使用 SkipTake),但 List<T> 具有 GetRange 方法,这让它变得轻而易举:

    List<string> newList = oldList.GetRange(index, count);
    

    (其中index 是要复制的第一个元素的索引,count 是要复制的项目数。)

    当您说“二维字符串列表”时,您是指数组吗?如果是这样,您是指锯齿状阵列(string[][])还是矩形阵列(string[,])?

    【讨论】:

    • 这是列表的浅拷贝(这不会将列表复制到新列表,它有引用)。所以你必须小心
    • @Diode:它将列表的内容复制到新列表 - 列表的内容 字符串引用。没错,它是浅拷贝,但由于字符串是不可变的,因此浅拷贝与深拷贝几乎没有区别。
    【解决方案2】:

    我不确定我是否得到问题,但我会查看 Array.Copy 函数(如果您指的是数组的字符串列表

    这是一个在 .NET 2.0 框架中使用 C# 的示例:

    String[] listOfStrings = new String[7] 
                                  {"abc","def","ghi","jkl","mno","pqr","stu"};
    String[] newListOfStrings = new String[3];
    
    // copy the three strings starting with "ghi" 
    Array.Copy(listOfStrings, 2, newListOfStrings, 0, 3);
    
    // newListOfStrings will now contains {"ghi","jkl","mno"}
    

    【讨论】:

      【解决方案3】:

      FindAll 将让您编写一个 Predicate 来确定要复制哪些字符串:

      List<string> list = new List<string>();
      list.Add("one");
      list.Add("two");
      list.Add("three");
      
      List<string> copyList = list.FindAll(
          s => s.Length >= 5
      );
      
      copyList.ForEach(s => Console.WriteLine(s));
      

      这会打印出“三”,因为它有 5 个或更多字符长。其他的都被忽略了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-06
        • 2020-10-09
        • 2014-10-22
        • 2020-01-05
        • 2012-11-25
        • 2019-06-22
        • 1970-01-01
        • 2016-12-11
        相关资源
        最近更新 更多