Наиболее простым решением было бы придерживаться шаблона MVVM, создав коллекцию и наполнив ее данными из другого класса, как вы уже упоминали. Это легко, и все знают, что происходит. Кроме того, таким образом, контекст данных остается в той же модели представления и - если вы что-то меняете - он также остается в этом контексте. В вашем случае это означает, что вы должны создать ObservableCollection<Student> Students
и заполнить его содержимое в MainViewModel
.
Если к этим данным нужно обращаться со всего приложения, вам следует подумать о реализации DataManager (например, синглтоном), а не о копировании данных в каждой модели представления.
Задайте для свойства UITableViewController.tableView экземпляр вашего настраиваемого подкласса UITableView.
UITableViewController - это просто UIViewController с экземпляром UITableView и viewController, установленным в качестве делегата и источника данных для таблицы. ViewController реализует заглушки для этих методов делегата.
Вы можете сделать это самостоятельно, если UIViewController реализует протоколы UITableViewDataSource и UITableViewDelegate. Затем в методе loadView (или viewDidLoad) UIViewController установите dataSource экземпляра tableView и делегируйте self.
Вы можете использовать там свой собственный подкласс таблицы.
Хорошо, я нашел другой алгоритм: метод псевдонима (также упоминается в этом ответе ). По сути, он создает такое разделение вероятностного пространства, что:
n
разделов, все одинаковой ширины r
st nr = m
. . 1216] каждый раздел содержит два слова в некотором соотношении (которое сохраняется вместе с разделом). w i
, f i = ∑ разделы t st w i ∈ t r × ratio (t, w i )
Поскольку все разделы имеют одинаковый размер, выбор раздела может выполняться в постоянной работе (выберите случайным образом индекс из 0 ... n-1
), а раздел Затем можно использовать коэффициент s, чтобы выбрать, какое слово будет использоваться в постоянной работе (сравните число в формате pRNG с соотношением между двумя словами). Таким образом, это означает, что выбор p
может быть выполнен в O (p)
работе с таким разделом.
Причина, по которой такое разделение существует, состоит в том, что существует слово w i
st f i
w i '
st f i '> r
, поскольку r - среднее значение частот.
Для такой пары w i
и w i '
мы можем заменить их псевдословом w' i
частоты f ' i = r
(что представляет w i
с вероятностью f i / r
и w i '
с вероятностью 1 - f i / r
) и новым словом w' i '
настроенной частоты ] f ' i' = f i ' - (r - f i )
соответственно. Средняя частота всех слов по-прежнему будет r, и по-прежнему действует правило из предыдущего абзаца. Поскольку псевдослово имеет частоту r и состоит из двух слов с частотой r, мы знаем, что если мы будем повторять этот процесс, мы никогда не получим псевдослово из псевдослова, и такая итерация должна заканчиваться последовательность из n псевдословов, которые являются искомым разделом.
Это действительно работает, если количество разделов q> n
(вам просто нужно доказать это по-другому). Если вы хотите убедиться, что r является целым, и вы не можете легко найти множитель q
из m
st q> n
, вы можете заполнить все частоты в n
, так что f ' i = nf i
, что обновляет m' = mn
и устанавливает r '= m
, когда q = n
.
В любом случае,