Ребята, есть такой массив, к примеру, [2,5,1,2,7,5,8,3,2,1,1,5,1,9]
нужно сделать так, чтобы массив стал таким [1,1,1,1,2,5,2,7,5,8,2,3,5,9], т.е. все 1цы в начало сместить, а остальные элементы по очереди следования оставить как в изначальном, после 1ц. Интересует можно ли это сделать через метод sort и в клоужере {через $0} или через методы map, reduce или filter (как в копошилке было у Ивана). Т.е. не в лоб сортировку запустить, а именно через методы эти и таким способом. Спасибо.
Про сортировку массива с клоужером
skerjie
#1
nubideus
#3
let arr = [2, 5, 1, 2, 7, 5, 8, 3, 2, 1, 1, 5, 1, 9]
print(arr.sorted{ a, b in a == 1 }) // [1, 1, 1, 1, 2, 5, 2, 7, 5, 8, 3, 2, 5, 9]
print(arr.filter{ $0 == 1 } + arr.filter{ $0 != 1 }) // [1, 1, 1, 1, 2, 5, 2, 7, 5, 8, 3, 2, 5, 9]
print(arr.reduce([[Int](), [Int]()], {
p, c in
var p = p
p[c == 1 ? 0 : 1].append(c)
return p
}).reduce([Int](), {
return $0 + $1
})) // [1, 1, 1, 1, 2, 5, 2, 7, 5, 8, 3, 2, 5, 9]
через map не стал делать потому что map не для этого нужен
skerjie
#4
ух ты, спасибо огромное, с reduce нужно разобраться, как-то с лету сложновато выглядит, но за остальное вообще спасибо. Ну и можно тогда сказать для чего map? Еще раз спасибо