Каков лучший способ случайной реконструкции списка объектов в c#?

Ваша основная проблема - следующее замечание по phpMyAdmin в столбце description:

Из-за своей длины этот столбец может быть недоступен для редактирования.

blockquote>

В этом случае текущий тип данных TEXT слишком мал, поэтому нет места для добавления дополнительных данных в поле. Вы можете изменить тип данных следующим образом ALTER TABLE на больший (MEDIUMTEXT или LONGTEXT):

ALTER TABLE oc_information_description MODIFY description MEDIUMTEXT

Ваша вторая проблема - неправильный синтаксис sql (пытается решить первая проблема):

1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с «COLUMN description (MAX_ROWS = 1000000000 AVG_ROW_LENGTH = 1000000000)» в строке 1

blockquote>

Нельзя указать [117 ] или MAX_ROWS для определенного столбца. Вы можете указать их только для таблицы. Вы можете изменить эти значения следующим образом ALTER TABLE :

ALTER TABLE oc_information_description AVG_ROW_LENGTH = 1000000000, MAX_ROWS = 1000000000

table_options означает параметры таблицы такого типа, которые можно использовать в операторе CREATE TABLE, такие как ENGINE, AUTO_INCREMENT, AVG_ROW_LENGTH, MAX_ROWS, ROW_FORMAT или TABLESPACE.

BLOCKQUOTE>

6
задан Arron S 6 January 2009 в 19:45
поделиться

7 ответов

Как насчет некоторого Knuth-Fisher-Yates переставляют алгоритм?

for (int i = cards.Length - 1; i > 0; i--)
{
    int n = rand.Next(i + 1);
    Swap(ref cards[i], ref cards[n]);
}

Код взят от Кодирования Ужаса. Это - также рекомендуемое продолжение читать, как люди часто делают эту несправедливость.

12
ответ дан 8 December 2019 в 05:24
поделиться

Проверьте этот классный Linq способ сделать его:

public class Employee
{
    public int Id
    {
        get;
        set;
    }
    public string Name
    {
        get;
        set;
    }
}

Заполните список:

    List<Employee> list = new List<Employee>();

    list.Add(new Employee { Id = 1, Name = "Davolio Nancy" });
    list.Add(new Employee { Id = 2, Name = "Fuller Andrew" });
    list.Add(new Employee { Id = 3, Name = "Leverling Janet" });
    list.Add(new Employee { Id = 4, Name = "Peacock Margaret" });
    list.Add(new Employee { Id = 5, Name = "Buchanan Steven" });
    list.Add(new Employee { Id = 6, Name = "Suyama Michael" });
    list.Add(new Employee { Id = 7, Name = "King Robert" });
    list.Add(new Employee { Id = 8, Name = "Callahan Laura" });
    list.Add(new Employee { Id = 9, Name = "Dodsworth Anne" });

Затем вид:

    list = list.OrderBy(emp => Guid.NewGuid()).ToList();

Кредит

6
ответ дан 8 December 2019 в 05:24
поделиться

Моим любимым решением перестановки материала является использование N*log N вид, и передайте его предикат вида, который возвращает случайный результат. Это имеет хорошую функцию, которая является, может быть сделан с минимумом нового кода с помощью стандартных блоков, которые большинство языков имеет удобный даже в самых чередуемых версиях.

1
ответ дан 8 December 2019 в 05:24
поделиться

Вы могли использовать алгоритм перестановки Фишера-Йетса, который работает в линейно-разовом.

2
ответ дан 8 December 2019 в 05:24
поделиться

Позвольте мне направить Вас к одному НЕПРАВИЛЬНОМУ способу сделать его, и способ, которым я признаюсь, что использовал прежде и никогда не видел ошибки его до этого сообщения в блоге:

http://www.codinghorror.com/blog/archives/001015.html

2
ответ дан 8 December 2019 в 05:24
поделиться

Я создал бы новый Список и заполнение его с объектами, которые случайным образом выбраны и удалены из исходного Списка.

0
ответ дан 8 December 2019 в 05:24
поделиться

Попробуйте этот код здесь

Это использует IComparer. Выдержать сравнение

Это будет хорошая практика, если Вы сделаете функцию с помощью дженериков

0
ответ дан 8 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

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