Пространства имен являются пакетами по существу. Они могут использоваться как это:
namespace MyNamespace
{
class MyClass
{
};
}
Тогда в коде:
MyNamespace::MyClass* pClass = new MyNamespace::MyClass();
Hope, которая помогает.
Или, если Вы хотите всегда использовать определенное пространство имен, можно сделать это:
using namespace MyNamespace;
MyClass* pClass = new MyClass();
Редактирование: После того, что сказал bernhardrusch, я склонен не использовать "синтаксис" пространства имен x использования вообще, я обычно явно определяю пространство имен при инстанцировании моих объектов (т.е. первый пример, который я показал).
И поскольку Вы спросили ниже , можно использовать столько пространств имен, сколько Вам нравится.
Если вам нужно только перечислить элементы , это будет работать:
stuff.OrderBy(item => item.Date).Skip(3);
Если вы действительно хотите, чтобы это было в форме списка, вам нужно будет затем вызвать .ToList ()
:
stuff = stuff.OrderBy(item => item.Date).Skip(3).ToList();
Если вы хотите заменить список новым, вы можете попробовать следующее:
stuff = stuff.OrderBy( c => c.Date).Skip(3).ToList();
С другой стороны, если вам нужно материал
, чтобы остаться такой же точный экземпляр List
, вы можете отсортировать его, а затем удалить диапазон по индексу:
stuff.Sort(...);
stuff.RemoveRange(0, 3);
const int cToRemove = 3;
var top3 = (from c in stuff
orderby c.Date ascending
select c).Take(cToRemove);
Если ваш список упорядочен, вы можете просто использовать метод RemoveRange
:
int n = 3;
stuff.RemoveRange(stuff.Count - n, n);
Все остальные ответы до сих пор основывались на сортировке списка, которая является операцией O (n log n), если вы еще не отсортировали ее.
Вот решение, которое это O (n), хотя и с ужасным постоянным множителем. Он использует MinBy
из MoreLINQ - вы можете легко переписать это в своем собственном коде, если вам нужно, и даже заставить его возвращать индекс напрямую вместо значения (и использовать RemoveAt
вместо Remove
).
// The list.Count part is in case the list starts off with
// fewer than 3 elements
for (int i = 0; i < 3 && list.Count > 0; i++)
{
var oldest = list.MinBy(x => x.Date);
list.Remove(oldest);
}
Конечно, вы могли бы написать это более эффективно, чтобы находить самые старые три элемента за один проход списка, но код будет значительно сложнее, что приведет к больше шансов на ошибку. Вышеупомянутое должно нормально работать в O (n), даже если ему не хватает элегантности, когда вы думаете о том, что он просматривает список 6 раз :)