Помогите решить задачи по swift

swift

#1

1 - Заменить в массиве отрицательные числа нулем

2 – Сортировка массива по убыванию(возрастанию)

3 – Найти max(min) элемент в массиве

4 – Найти сумму элементов массива


#2

Хорошо, но напишите Ваши мысли по поводу каждого из пунктов, только тогда будет толк от обучения.


#3

Еще месяц назад подобные задания меня вводили в ступор. Потому что мне казалось, что я это должен быстро в уме прокрутить и решить. Но такое случается только после приобретения опыта.
Поэтому, смотрите что объединяет все эти четыре пункта? Правильно, слово массив. Открываете документацию по массиву и штудируете ее. А так же все методы класса NSArray


#4

Решил только 1-ю и 4-ю задачу. Остальные как то труднее решать

// Заменить в массиве отрицательные числа нулем

var array = [1, 2, -3, -4, 5, -6, -7, 8, -9, 10]

for var item in array {
if item < 0 {
item = 0
array[item] = 0
}
print(item)
}

// Найти сумму элементов массива

var array_summa = [1, 2, 3, 4, 5]
var summa = 0
for i in array_summa {
summa += i
}
print(summa)


#5

Создайте пожалуйста новую тему на каждый отдельный вопрос.


#6

Решение 3 задачи, если надо объясню.

let array = [2,3,454,234,12,-234,53,-1,222,342,32423,-53]

func getArray (_ array :[Int], _ closure : (Int, Int?) -> Bool) -> Int {
    var optValue : Int? = nil
    for value in array {
        if closure(value, optValue) {
            optValue = value
        }
    }
    return optValue!
}

print(array.sorted())
print(getArray(array) { ($1 != nil) ? $0 < $1! : true})
print(getArray(array) { ($1 != nil) ? $0 > $1! : true})

#7

круто придумано с тернарным оператором + closures)


#8

А вот тебе сортировочка:

let array = [1,3,5,2,3,6,8,7,9,0]
var reversed = array.sorted(by: >)
var normal = array.sorted(by: <)

//Можно так, если это не понятно

var reversed = array.sorted(by: {i1, i2 in return i1 > i2}) 
var reversed = array.sorted(by: {i1, i2 in return i1 < i2}) 

 //или так

var reversedNames = arrayInt.sorted(by: { $0 > $1})
var reversedNames = arrayInt.sorted(by: { $0 < $1})

//или если нужна функция

func sortArray (i1 : Int, i2: Int) -> Bool {
    return i1 > i2 
}
var reverse = array.sorted(by: sortArray)

я предпочитаю шортхэнд, а вобще читайте методичку по свифту, там все написано :slight_smile:


#9

не посмотрел на дату и начал решать

let array = [1, 2, 3, 4, 5, -1, -2, -3, -4, -5];

// 1 - Заменить в массиве отрицательные числа нулем
print("map: \(array.map{ $0 < 0 ? 0 : $0 })");

// 2 – Сортировка массива по убыванию(возрастанию)
print("sort1: \(array.sorted{ $0 > $1 })"); // убыванию
print("sort2: \(array.sorted{ $0 < $1 })"); // возрастанию

// 3 – Найти max(min) элемент в массиве
print("max: \(array.reduce(array[0]) { $0 < $1 ? $1 : $0 })"); // max
print("min: \(array.reduce(array[0]) { $0 > $1 ? $1 : $0 })"); // min

// 4 – Найти сумму элементов массива
print("sum: \(array.reduce(0) { $0 + $1 })");

Функции, замыкания помогите разобраться
#10

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#11

конечно слабо, не буду(не хочу) же я писать какую-нибудь сортировку, которую нигде использовать не буду

let array = [1, 2, 3, 4, 5, -1, -2, -3, -4, -5];

var a1 = [Int](repeating: 0, count: array.count);
var min = array.first ?? 0;
var max = min;
var sum = 0;

for index in 0..<array.count {
	let item = array[index];
	a1[index] = item < 0 ? 0 : item;

	if item < min {
		min = item;
	}

	if item > max {
		max = item;
	}

	sum += item;
}

// 1 - Заменить в массиве отрицательные числа нулем
print("map: \(a1)");

// 3 – Найти max(min) элемент в массиве
print("max: \(max)"); // max
print("min: \(min)"); // min

// 4 – Найти сумму элементов массива
print("sum: \(sum)");

#12

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#13

Здравствуйте) мне кажется, что первая задача у вас решена не совсем верно, если хотите убедиться в этом - напишите в самом конце строку print(array)… Окажется, что сам массив не изменился так, как этого требовалось в задании, а принял вид: [0, 2, -3, -4, 5, -6, -7, 8, -9, 10]

мой вариант решения:

var mass = [1, 2, -3, -4, 5, -6, -7, 8, -9, 10]
 //создаем массив, который нужно изменить 
var i = 0 
// создаем переменную счетчик
while i != mass.count  { 
//объявляем цикл while от i=0 до mass.count равного в данном случае 10
    var iItem = mass[i] 
// объявляем переменную в которую будем вносить i-тый элемент массива
if iItem <= 0 { 
//проверяем, меньше ли выбранный элемент чем 0 используя созданную ранее переменную
    mass[i] = 0 
//если да - то приравниваем его к нулю
}
    i += 1
 //переходим к следующему элементу 
}
print(mass) 
//выводим весь массив для проверки

#14

А можно пожалуйста Поподробнее объяснить всё? :slight_smile:
В целом если смотрю - то, объективно, понятно…но можно по отдельности сказать что вы конкретно делаете?