Hej wszystkim. Czy istnieje sposób kopiowania tylko części pojedynczej (lub jeszcze lepszej, dwu) wymiarowej listy ciągów na nową tymczasową listę ciągów?Kopiowanie fragmentu listy do nowej listy
8
A
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[,]
)?
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.
To płytka kopia listy (nie powoduje to skopiowania listy do nowej listy, ma odniesienia). Musisz więc zachować ostrożność. –
@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. –