2009-05-29 18 views

Odpowiedz

15

Nawet LINQ robi to łatwe i bardziej ogólny niż tylko list (z wykorzystaniem Skip i Take) List<T> ma metodę GetRange co sprawia, że ​​wiatr:

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

(Gdzie index jest indeks pierwszy element do skopiowania, a count to liczba elementów do skopiowania.)

Kiedy mówisz "dwuwymiarowa lista napisów" - masz na myśli tablicę? Jeśli tak, masz na myśli poszarpaną tablicę (string[][]) lub tablicę prostokątną (string[,])?

+1

To płytka kopia listy (nie powoduje to skopiowania listy do nowej listy, ma odniesienia). Musisz więc zachować ostrożność. –

+1

@Diode: kopiuje zawartość listy do nowej listy - zawartość listy * to * odwołania do ciągów znaków. Masz rację, że to płytka kopia, ale ponieważ ciągi znaków są niezmienne, i tak płytka kopia jest prawie nie do odróżnienia od głębokiej kopii. –

0

Nie jestem pewien, mam pytanie, ale chciałbym spojrzeć na Array.Copy funkcji (czy przez list ciągów masz na myśli tablic)

Oto przykład za pomocą C# w .NET Framework 2.0:

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"} 
0

FindAll pozwoli Ci napisać orzecznika w celu ustalenia, które struny skopiować:

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

To wypisuje "trzy", ponieważ ma 5 lub więcej znaków. Pozostałe są ignorowane.