Я полагаю, что вы можете сделать это «не очень элегантно», с помощью NSArray
и NSSet
.
Для функционального подхода, используемого в решении LINQ, вы можете либо
1)Google для некоторых функциональных библиотек Objective-C - http://www.google.com/search?q=functional+programming+objective-c
или
2) реализовать необходимые функции - Intersect
, Zip
, Count
, Sum
.
Intersect(a1, a2)
.Сделайте наборы из ваших массивов и сделайте пересечение с objectsPassingTest:
.
Zip(block, a1, a2)
.Выполните итерацию max (a1.count, a2.count) и вставьте в массив ответа результат вызова блока для соответствующих элементов массива.
Count(predicate, array)
равно Sum((x -> predicate(x) ? 1 : 0), array)
Sum(block, array)
это Foldl((x, sum -> sum + block(x)), 0, array)
Foldl(block, init, array)
это id result = init; for (id obj in array) { result = block(result, obj); }
Я верю, независимо от того, какой подходВы выбираете результат будет ужасно чертовски.Objective-C просто не такой язык.