Scala лучший способ превратить Набор в Карту ключом?

Вопрос слишком размытый, но я попробую. Если вы используете переход из другого viewController, и данные, например, представляют собой массив строк, т.е. в вашем первом viewController:

  var arrayOfStrings = ["StringRow1", "StringRow2"] // etc

, и вы хотите иметь доступ к этому массиву при вводе новый viewController и используйте его для своего tableView, затем вы можете использовать prepareForSegue

Во-первых, в вашем viewController с tableView есть переменная, готовая для массива:

  var arrayOfStrings = [String]()
[ 1110] Затем вы можете передать данные следующим образом:

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if segue.identifier == "SegueToTableView" {
        if let vc = segue.destination as? YourTableViewController 
     {
            vc.arrayOfStrings = self.arrayOfStrings
        }
    }
}

Теперь, когда вы прибудете в свой tableView viewController, ваши данные arrayOfStrings будут переданы.

Это простой простой пример, поскольку вы не предоставили много контекста.

153
задан Eugene Yokota 15 December 2010 в 20:16
поделиться

3 ответа

Вы можете использовать

c map (t => t.getP -> t) toMap

но имейте в виду, что это требует 2 обхода.

224
ответ дан 23 November 2019 в 22:05
поделиться

Можно создать Карту с переменным количеством кортежей. Так используйте метод карты на наборе, чтобы преобразовать его в набор кортежей и затем использовать: _ * обманывают для преобразования результата в аргумент переменной.

scala> val list = List("this", "maps", "string", "to", "length") map {s => (s, s.length)}
list: List[(java.lang.String, Int)] = List((this,4), (maps,4), (string,6), (to,2), (length,6))

scala> val list = List("this", "is", "a", "bunch", "of", "strings")
list: List[java.lang.String] = List(this, is, a, bunch, of, strings)

scala> val string2Length = Map(list map {s => (s, s.length)} : _*)
string2Length: scala.collection.immutable.Map[java.lang.String,Int] = Map(strings -> 7, of -> 2, bunch -> 5, a -> 1, is -> 2, this -> 4)
20
ответ дан James Iry 23 November 2019 в 22:05
поделиться

В дополнение к решению @James Iry также возможно выполнить это использование сгиба. Я подозреваю, что это решение немного быстрее, чем метод кортежа (меньше объектов мусора создается):

val list = List("this", "maps", "string", "to", "length")
val map = list.foldLeft(Map[String, Int]()) { (m, s) => m(s) = s.length }
15
ответ дан Daniel Spiewak 23 November 2019 в 22:05
поделиться
Другие вопросы по тегам:

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