Как назначить массив int и строк в одну строковую переменную в swift?

У меня есть массив, который принимает 2 типа, String и Int, код выглядит так

var totalDoubleSet1Array = [(Dante,10), (Cassius, 9), (Rio, 5)]
let sortedArray = totalDoubleSet1Array.sort { $0.1 > $1.1 }

Затем я использую функцию сортировки, чтобы упорядочить самый высокий балл (Int) до самого низкого с именем рядом с ним. (Таким образом, я могу присвоить это строке и отобразить в AlertAction). Я видел где-то здесь, что да, я могу вывести на консоль массив одного типа String или Int и т. Д., Но как я могу назначить этот массив из 2 типы (Stings и Ints) для новой переменной String, чтобы я мог назначить ее в сообщении AlertAction в быстром, пожалуйста? Или даже лучше, как я могу получить отдельный элемент каждой записи, чтобы я мог назначить его на строку Var? Надеюсь, это имеет смысл.. Спасибо

2 ответа

Решение

Это не "массив двух типов", это массив кортежей. Вы можете получить элемент из массива и взять его отдельные части, например:

let (name, score) = totalDoubleSet1Array[i]

После этого назначения вы получите две переменные - name типа String это имеет значение iимя -го элемента и score типа Int это имеет значение iоценка по второму элементу.

Если вам нужно только имя, у вас есть два варианта:

  • Вы могли бы использовать let (name, _) = totalDoubleSet1Array[i] синтаксис или
  • Вы могли бы использовать let name = totalDoubleSet1Array[i].1 вместо.

Обратите внимание, что вы уже используете второй синтаксис в выражении сравнения вашей функции сортировки:

sort { $0.1 > $1.1 }

По мнению Apple, кортежи не лучший выбор для структур данных...

Почему бы просто не использовать пользовательскую структуру

struct Player {
    var name : String
    var score : Int
}

let totalDoubleSet1Array = [Player(name:"Dante", score:10), Player(name:"Cassius", score:9), Player(name:"Rio", score:5)]
let sortedArray = totalDoubleSet1Array.sort { $0.score > $1.score }

Тогда вы можете легко получить доступ к имени, например, в виде таблицы

let player = sortedArray[indexPath.row]    
nameLabel.text = player.name
Другие вопросы по тегам