В perl функция splice возвращает новый массив элементов из существующего массива и одновременно удаляет эти элементы из существующего массива.
my @newarry = splice @oldarray, 0, 250;
@newarray
теперь будет содержать 250 записей из @oldarray
, а @oldarray
меньше на 250 записей.
Существует ли эквивалент для классов коллекции C #, например, Array, List, Queue, Stack с аналогичной функцией? До сих пор я видел только решения, для которых требуется два шага (возврат + удаление).
Обновление - никакой функциональности не существует, поэтому я реализовал метод extensio для поддержки функции Splice:
public static List<T>Splice<T>(this List<T> Source, int Start, int Size)
{
List<T> retVal = Source.Skip(Start).Take(Size).ToList<T>();
Source.RemoveRange(Start, Size);
return retVal;
}
Со следующим модульным тестом - который успешно:
[TestClass]
public class ListTest
{
[TestMethod]
public void ListsSplice()
{
var lst = new List<string>() {
"one",
"two",
"three",
"four",
"five"
};
var newList = lst.Splice(0, 2);
Assert.AreEqual(newList.Count, 2);
Assert.AreEqual(lst.Count, 3);
Assert.AreEqual(newList[0], "one");
Assert.AreEqual(newList[1], "two");
Assert.AreEqual(lst[0], "three");
Assert.AreEqual(lst[1], "four");
Assert.AreEqual(lst[2], "five");
}
}