Сравните массив с 100 идентификаторами элементов (содержащими дубликаты) с массивом с уникальными идентификаторами. - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу посчитать, сколько раз числа из arr1 появляются в arr2.Я пытался пересекается с множествами, но я не хочу удалять дубликаты.

var arr1 = [1,4,5,7]

func compareCount(arr2[Int])-> Int {
    //arr2 = 1,1,4,5,6,6,3,9,7,7,7,1,7


    return count 
    //returns 9 as there are 9 elements within arr2 that exist within arr1
}

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы можете использовать NSCountedSet для этого:

var arr1 = [1,4,5,7]
var arr2 = [1,1,4,5,6,6,3,9,7,7,7,1,7]
let countedSet = NSCountedSet(array: arr2)

Затем, выполнить итерацию по arr1, и для каждого вы легко получите число вхождений с count(for:) и при уменьшении,Вы можете добавить их:

let numberOfOccurences = arr1.reduce(into: 0) { (result, current) in
    let numberOfOccurencesForCurrent = countedSet.count(for: current)
    result += numberOfOccurencesForCurrent
}

print("numberOfOccurences: \(numberOfOccurences)")

Редактировать:

Если вы не хотите использовать reduce() (потому что вы хотите избежать его использования, не понимая его), а лучше сделатьболее простой цикл:

var numberOfOccurences = 0
arr1.forEach({ numberOfOccurences += countedSet.count(for: $0) })
0 голосов
/ 10 декабря 2018

Цикл первого массива и подсчет всех фильтруемых элементов во втором

var count = 0
arr1.forEach( { value in
    count += arr2.filter( {$0 == value} ).count
})
...