Возможно, я не понимаю ваши намерения, но кажется, что вы хотите, чтобы элементы из masterA
, имеющие нечетные индексы, должны храниться в oddA
, и, наоборот, элементы masterA
, которые имеют даже индексы, должны храниться в evenA
.
Вы можете добиться этого, отфильтровывая masterA
wrt индексы masterA
, легко доступные из masterA.enumerated()
.
let masterA = [4, 5, 2, 1, 7, 8, 1]
let evenA = masterA.enumerated().filter { $0.0 % 2 == 0 }.map{ $0.1 }
let oddA = masterA.enumerated().filter { $0.0 % 2 != 0 }.map{ $0.1 }
print(evenA) // [4, 2, 7, 1]
print(oddA) // [5, 1, 8]
Как отмечает @Hamish в своем комментарии ниже, мы могли бы использовать compactMap
(Swift 3: flatMap
) как альтернатива цепным filter
и map
.
let evenA = masterA.enumerated().compactMap { $0 % 2 == 0 ? $1 : nil }
let oddA = masterA.enumerated().compactMap { $0 % 2 != 0 ? $1 : nil }
Последнее compactMap
решение является более кратким, тогда как решение filter
... map
, возможно, показывает намерение немного яснее. В этом конкретном соперничестве по сравнению с семантикой я лично предпочел бы решение compactMap
.
Взгляните на ECMA 262, раздел 12.11 , второй алгоритм, 4.c.
c. Если входной сигнал равен clauseSelector, как определено оператором ===, тогда ...
blockquote>
Попробуйте:
switch(1) {
case '1':
alert('Switch comparison is NOT strict.');
break;
case 1:
alert('Switch comparison is strict.');
break;
default:
alert('Huh?');
}
http://qfox.nl/notes/110 отвечает на ваш вопрос. (Этот парень много знает о nitty gritty JavaScript)
Переключатели в Javascript используют строгую проверку типов (===). Поэтому вам никогда не придется беспокоиться о принуждении, которое предотвращает несколько wtfjs :). Если, с другой стороны, вы рассчитывали на принуждение, неудачу, потому что вы не можете заставить его.
blockquote>