Подтвердить что ты не робот

Как переставить элемент массива в новое положение в Swift?

Рассмотрим массив [1,2,3,4]. Как я могу переставить элемент массива в новое положение.

Например:

put 3 into position 4 [1,2,4,3]

put 4 in to position 1 [4,1,2,3]

put 2 into position 3 [1,3,2,4].

4b9b3361

Ответ 1

Это помещает 3 в позицию 4.

let element = arr.removeAtIndex(3)
arr.insert(element, atIndex: 2)

Вы можете даже сделать общую функцию:

func rearrange<T>(array: Array<T>, fromIndex: Int, toIndex: Int) -> Array<T>{
    var arr = array
    let element = arr.removeAtIndex(fromIndex)
    arr.insert(element, atIndex: toIndex)

    return arr
}

Здесь нужен var arr, потому что вы не можете мутировать входной параметр без указания его in-out. В нашем случае, однако, мы получаем чистые функции без побочных эффектов, с которыми, на мой взгляд, гораздо легче рассуждать. Затем вы можете вызвать его так:

let arr = [1,2,3,4]
rearrange(arr, fromIndex: 2, toIndex: 0) //[3,1,2,4]

Ответ 2

изменить/обновить: Swift 3.x

extension Array {
    mutating func rearrange(from: Int, to: Int) {
        precondition(from != to && indices.contains(from) && indices.contains(to), "invalid indexes")
        insert(remove(at: from), at: to)
    }
}

var numbers = [1,2,3,4]
numbers.rearrange(from: 1, to: 2)

print(numbers)  // [1, 3, 2, 4]

Ответ 3

хороший отзыв от Лео.

для Swift 3:

extension Array {  
    mutating func rearrange(from: Int, to: Int) {
        insert(remove(at: from), at: to)
    }
}

var myArray = [1,2,3,4]
myArray.rearrange(from: 1, to: 2)   
print(myArray)

Ответ 4

Мы можем использовать метод swap для замены элементов в массиве:

var arr = ["one", "two", "three", "four", "five"]

// Swap elements at index: 2 and 3
print(arr)
swap(&arr[2], &arr[3])
print(arr)

Ответ 5

В быстрых для массивов функциях перемещения нет. вы можете взять объект по индексу, удалив его оттуда и поместите в свой любимый индекс, используя "insert"

var swiftarray = [1,2,3,4]
let myobject = swiftarray.removeAtIndex(1) // 2 is the object at 1st index
let myindex = 3
swiftarray.insert(myobject, atIndex: myindex) // if you want to insert the    object to a particular index here it is 3
swiftarray.append(myobject) // if you want to move the object to last index

Ответ 6

Обновление с помощью Swift 4, Индекс массива прокрутки

for (index,addres) in self.address.enumerated() {
     if addres.defaultShipping == true{
          let defaultShipping = self.address.remove(at: index)
          self.address.insert(defaultShipping, at: 0)
     }
}