Невозможно присвоить значение типа '()' типу [Int] - PullRequest
0 голосов
/ 08 октября 2018

Учитывая массив неотрицательных целых чисел A, вернуть массив, состоящий из всех четных элементов A, за которыми следуют все нечетные элементы A.

Input: [3,1,2,4]
Output: [2,4,3,1]
The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.

Я реализовал следующее, но этовыдает мне ошибку

Строка 17: невозможно присвоить значение типа '() типу' [Int] '

Кстати, есть более элегантное решение?

class Solution {
    func sortArrayByParity(_ A: [Int]) -> [Int] {
        var oddTemp :[Int] = []
        var evenTemp :[Int] = []

        for a in A
        {
            if a%2 == 0
            {
                evenTemp.append(a)
            }
            else
            {
                oddTemp.append(a)
            }
        }
        // error is thrown in the following
        return evenTemp += oddTemp         
    }
}

Ответы [ 4 ]

0 голосов
/ 09 октября 2018
return evenTemp + oddTemp

делает то, что вы хотите

Изменяемые массивы могут быть отсортированы на месте, например, для вашего примера вы можете сделать

var a = [0, 3, 1, 2, 4, 5, 6, 6, 7, 7, 8,9,10,10,11,11,11,11,12]
a.sort { $1 % 2 > $0 % 2 }
print(a) // [0, 2, 4, 6, 6, 8, 10, 10, 12, 3, 1, 5, 7, 7, 9, 11, 11, 11, 11]
0 голосов
/ 09 октября 2018

Этот

evenTemp += oddTemp 

ничего не возвращает

evenTemp += oddTemp 
return evenTemp 
0 голосов
/ 09 октября 2018

Если вы хотите изменить исходный массив:

var a = [3, 1, 2, 4]
a.sort(by: { $0 % 2 < $1 % 2 })
print(a)  //prints [2, 4, 3, 1]

Если вы предпочитаете неизменность:

let a = [3, 1, 2, 4]
let result: [Int] = a.sorted(by: { $0 % 2 < $1 % 2})
print(result)  //prints [2, 4, 3, 1]

Другое решение:

let a = [3,1,2,4]

let result: [Int] = a.reduce(into: []) { accumulator, element in
    let newIndex = element % 2 == 0 ? accumulator.startIndex : accumulator.endIndex
    accumulator.insert(element, at: newIndex)
}
print(result)

отпечатки [4, 2, 3, 1]

0 голосов
/ 08 октября 2018

Оператор += изменяет левый операнд, и его возвращаемое значение равно Void.Вам необходимо разделить конканацию массивов и инструкцию return на отдельные строки.

evenTemp += oddTemp
return evenTemp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...