@andrey_kino

Как использовать .sorted для строки двумерного массива c сохранением соответствия второй строки?

Нужно отранжировать по возрастанию первую строку да так чтобы значения второй строки при ранжировании по возрастанию первой строки приняли места соответствующих им до ранжирования элементов первой строки.
Имеем [[5, 1, 3], [1, 2, 7]] нужно [[1, 3, 5], [2, 7, 1]]
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 1
maximglobak
@maximglobak
iOS developer
Написал пример для конкретного случая из двух массивов
//: Playground - noun: a place where people can play

import UIKit

let input = [[5, 1, 3], [1, 2, 7]]
let output = [[1, 3, 5], [2, 7, 1]]

// ---------

var result = input

if let firstArray = result.first, var secondArray = result.last {
  // Сортируем первый массив
  let firstOutput = firstArray.sorted()
  // Создаем копию второго массива, которую будем изменять в процессе перестановки
  var secondOutput = secondArray


  for i in 0..<firstArray.count {

    // Значение элемента до сортировки
    let value = firstArray[i]

    // Получаем позицию после сортировки
    if let after = firstOutput.index(of: value) {
      // Записываем изменения во второй массив
      secondOutput[after] = secondArray[i]
    }
  }

  // Перезаписываем результат
  result = [firstOutput, secondOutput]

}

print(result)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы