@Lici

Swift: как обратиться к случайному элементу двухмерного массива?

Я задал массив массивов (2D массив):
var multArray = Array<Array<String>>()

Я провел не до конца понятную мне процедуру его "инициализации", без которой выдается ошибка:

for i in 0..<firstBlockStruct.count {
            multArray.append(Array(count:0, repeatedValue:String()))
        }


В нем хранятся слова и фразы. Теперь мне нужно выбрать случайную фразу, типа:

multArray[i][j], где j это число от 0 до числа, равного количеству элементов в массиве.

Я пытался так:

multArray[i][Int(arc4random_uniform(UInt8(multArray[i].count)))]

multArray[i][Int(arc4random_uniform(multArray[i].count))]

multArray[i][Int(random(multArray[i].count))]

multArray[i][random(multArray[i].count)]


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

multArray[i][Int(arc4random_uniform(0))]

Так как правильно скормить в качестве аргумента рендомайзеру параметр количества элементов во втором измерении массова? (и тот ли рендомайзер я юзаю?)

(а может я зря создал массив массивов и тут можно как-то сделать паскаль-стайл array[1..10][1..10][1..10] ?)
  • Вопрос задан
  • 1898 просмотров
Решения вопроса 1
@gressmc
// Playground - noun: a place where people can play

import UIKit

var multArray:[[String]]

multArray = Array(count:10, repeatedValue:Array(count:10, repeatedValue:"Что"))
// Получили 2-х мерный массив "матрицу" 10x10

for i in 0..<10 {
let j = multArray[i].count
println(multArray[i][Int(arc4random_uniform(UInt32(j-1)))])
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Попробуй так.
multArray[i][Int(arc4random_uniform(0))%multArray[i].count]

А так?
UInt32 count = multArray[i].count;
multArray[i][Int(arc4random_uniform(count))]
Ответ написан
Ваш ответ на вопрос

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

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