Разве использование не является обратной функцией в Вашем виде языка обмана немного? Я имею в виду, смотрение на решение Ruby дает как
def p(a)a==a.reverse end
, Вы могли легко переписать это как
def p(a)a==a.r end
и просто сказать создание дополнительного метода в коде так, чтобы "r" назвал реверс. Я хотел бы видеть, что люди отправляют решения, которые не содержат вызовы к другим функциям. Конечно, функция длины строки должна быть разрешена.
Ruby без реверса - 41 символа
def m(a)a==a.split('').inject{|r,l|l+r}end
VB.Net - 173 Символа
Function P(ByVal S As String) As Boolean
For i As Integer = 0 To S.Length - 1
If S(i) <> S(S.Length - i - 1) Then
Return False
End If
Next
Return True
End Function
_collection.RemoveAll(user => !user.IsApproved());
Если вы все еще в версии 2.0:
_collection.RemoveAll(delegate(User u) { return !u.IsApproved(); });
Кстати, если вы не хотите трогать исходный список, вы можете получить другой список одобренных пользователей с:
_collection.FindAll(user => user.IsApproved());
Вы всегда можете начать с верхнего индекса и продолжить движение вниз к 0:
for (int i = _collection.Count - 1; i >= 0; i--)
{
User user = _collection[i];
if (!user.IsApproved())
{
_collection.RemoveAt(i);
}
}
Ответ Мердада выглядит чертовски элегантно.
Всякий раз, когда есть шанс, что коллекция будет изменена в цикле, выберите вместо этого цикл для
. Решение, данное Мердадом, прекрасное, и его определенно стоит попробовать!
Вот код, который я считаю полезным при работе с изменяемыми коллекциями:
for(int index=0;index < _collection.Count; index++)
{
if (!_collection[index].IsApproved)
{
_collection.RemoveAt(index);
index--;
}
}