Ваша функция не работает правильно, когда пара чисел включает первый элемент массива. Вы используете:
if ($collection[$subtracted])
, чтобы проверить, является ли $subtracted
ключом массива. Но если значение $collection[$subtracted]
равно 0
, это также не пройдёт тест if
. Измените это на:
if (isset($collection[$subtracted]))
Вы также должны добавить:
return array();
после цикла for
, чтобы он возвращал пустой массив по умолчанию, если не найдено соответствующих элементов.
function twoSum($nums, $target) {
$collection = array();
foreach($nums as $key => $num) {
$subtracted = $target - $num;
if (isset($collection[$subtracted])) {
return array($collection[$subtracted], $key);
} else {
$collection[$num] = $key;
}
}
return array();
}
Существует 4 связанных стандартных пути:
sim is MainSim;
(sim as MainSim) != null;
sim.GetType().IsSubclassOf(typeof(MainSim));
typeof(MainSim).IsAssignableFrom(sim.GetType());
Можно также создать рекурсивный метод:
bool IsMainSimType(Type t)
{ if (t == typeof(MainSim)) return true;
if (t == typeof(object) ) return false;
return IsMainSimType(t.BaseType);
}
if (sim is MainSim)
все, в чем Вы нуждаетесь. ищет дерево наследования.
Опция, не работал на меня. Это дало мне предупреждение; "Данное выражение никогда не имеет обеспеченного ('MainSim') тип", я действительно верю однако, предупреждение, к которому имеют отношение больше платформа, которую мы имеем в распоряжении. Мое решение закончило тем, что было:
return t.BaseType == typeof(MainSim) || t.BaseType.IsSubclassof(typeof(MainSim));
Не столь чистый, как я надеялся, или столь простой, как Ваши ответы казались. Независимо, поблагодарите Вас все за свои ответы. Простота их заставляет меня понять, что у меня есть много для изучения.