将列表的一部分复制到新列表中

16

大家好。有没有一种方法可以将只有部分元素的单个(或最好是二维)字符串列表复制到一个新的临时字符串列表中?

3个回答

39

虽然LINQ确实比仅限于列表(使用SkipTake)更容易和更通用,但是List<T>GetRange方法可以轻松实现:

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

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

当您说“两维字符串列表”时,您是否指的是数组?如果是这样,您是指不规则数组(string[][])还是矩形数组(string[,])?


3
这是列表的浅拷贝(它并没有将列表复制到新的列表中,而是引用了原来的列表)。因此你需要小心。 - diyoda_
2
@Diode:它将列表的内容复制到新列表中 - 列表的内容是字符串引用。你说得对,这是一种浅拷贝,但由于字符串是不可变的,所以浅拷贝几乎与深拷贝无法区分。 - Jon Skeet

1
我不确定我理解问题,但我会看一下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"}

-1

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));

这将打印出“three”,因为它有5个或更多字符。其他的将被忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接