Подсчет количества одинаковых значений в массиве структур - PullRequest
0 голосов
/ 07 февраля 2020

Был поиск здесь, но большинство ответов, похоже, относятся к булевым значениям. У меня есть структура, определенная и инициализированная следующим образом:

Struct Question {
   var subjectID: Int
   var questionID: Int
}

//Examples
let questionOne = Question(subjectID: 0, questionID: 0)
let questionTwo = Question(subjectID: 0, questionID: 1)
let questionThree = Question(subjectID: 0, questionID: 2)
let questionFour = Question(subjectID: 1, questionID: 0)

//An array populated with the above
var questions = [Question]()

Я хотел бы найти способ вычисления:

1) Число уникальных значений subjectID в questions Array. Ответ должен быть 2.

2) Количество вопросов в questions Массив, где subjectID == 0 или 1. Ответ должен быть [3, 1].

Я исследовал с .filter и .map но, возможно, я нахожусь не на том касательном? Спасибо

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Вы должны использовать метод reduce коллекции и увеличить initialResult в случае, если nextPartialResult соответствует вашим критериям:

struct Question {
   var subjectID: Int
   var questionID: Int
}

let questionOne = Question(subjectID: 0, questionID: 0)
let questionTwo = Question(subjectID: 0, questionID: 1)
let questionThree = Question(subjectID: 0, questionID: 2)
let questionFour = Question(subjectID: 1, questionID: 0)

let questions = [questionOne, questionTwo, questionThree, questionFour]

let subjectCount = questions.reduce(0) { $0 + ($1.subjectID == 0 ? 1 : 0 )}

print(subjectCount)  // 3
1 голос
/ 07 февраля 2020

Для 1) вы бы вручную отфильтровали дублирующиеся значения. Вы можете получить массив всех subjectID с .map, например, так:

let subjectIDs = questions.map { $0.subjectID } 

для 2), вы можете просто использовать функцию .filter, например, так:

let subjectIdXCount = questions.filter { $0.subjectID == x }.count 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...