4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
|
|
1 | |
List<string> или все же List<StringBuilder>, что лучше использовать?04.09.2019, 12:26. Показов 4789. Ответов 14
Метки нет (Все метки)
Добрый день, хочется узнать с точки зрения производительности что подходит лучше в данном случае.
Есть List<List<T>>, в него добавляются строковые значения. Создается некое подобие ступенчатого массива, но динамически. К примеру: List<List<T>> где T пока string | 0. -List<T> {"1","2","3"} | 1. -List<T> {"4","5"} | 2. -List<T> {"6","7","8","9","10"} После чего мне нужно пройтись по первому листу и объединить значения 0 листа с значениями листа 1, далее полученное значение обьединить с List 2 и тд.. так же я заменяю значения List 1 на полученные, для удобства соединения с List 2. List<List<T>> где T пока string | 0. -List<T> {"1","2","3"} // наверное стоит удалять больше не используемый лист, но вроде как тогда индексы смещаются у всех значений, а это накладывает расходы на память(в теории, не уверен на сколько сильно) | 1. -List<T> {"14","25","3"} | 2. -List<T> {"6","7","8","9","10"} 1. Стоит ли заменить List<string> на List<StringBuilder> ? 2. Что вообще использовать в данной задаче вместо List<List<T>> ? может стоит заменить на какой нибудь ступенчатый массив? 3. На сколько вообще затратнее использовать замену в List 1, или лучше просто использовать буферную переменную? Цель сделать данный алгоритм максимально менее затратным по ресурсам памяти.
0
|
04.09.2019, 12:26 | |
Ответы с готовыми решениями:
14
Что предпочтительней в плане быстродействия и работы с памятью: List<List<string>> - new или .Clear() Конвертировать один элемент из List<List<Class>> в list и string Разбить List<string> на несколько обьектов c List<string> Необходимо создать dll в которой буду обрабатывать list<list<string>> |
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
04.09.2019, 12:42 | 2 |
Alone11, похоже на формирование какой-то двухмерной структуры с последующей проекцией-суммированием колонок в одномерный массив.
Может проще будет завести List<string> ? Количество элементов - количество колонок. При добавлении новых "строки" вы можете сразу выполнять конкатенацию и замену старых строк-значений новыми.List<T> {"1","2","3"} + {"4","5"} List<T> {"14","25","3"} + {"6","7","8","9","10"} List<T> {"146","257","38","9","10"} Никаких промежуточных списков и StringBuilder'ов. Добавлено через 1 минуту Ну и вопрос на засыпку: в строках только числа?
0
|
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
|
|
04.09.2019, 12:42 | 3 |
а что там вообще происходит? Задача в общем какая?
Вроде как список чисел целых, но почему то список строк.
0
|
4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
|
|
04.09.2019, 13:04 [ТС] | 4 |
Usaga, Да, только числа. Возможно, да , лучше List<string>, но тут скорее , нужно исходить из описания задачи, там при больших числах очень большой перебор и много конкатенаций, по этому скорее всего нужно как буфер использовать StringBuilder, и уже с ним операции проворачивать,а вместо List<> вообще словарь использовать, но я пока в раздумье.
QuestionAnd, Задача такая, есть некая последовательность цифр, произвольного значения и длинны. К примеру "123". За каждой цифрой закреплены возможные варианты, то есть если представить каждую цифру как ключ - значение, то у 1 может быть значение 1,8,9. Задача вывести список всех возможных комбинаций из всех цифр в строковом формате. Пример 123, 823, 923. Я распарсил значения по List<string> (использовал строки, а не числа так как не хочется с разрядами морочиться) получился некое подобие словаря, а потом иду перебором по парно, и обьединяю сначала первые два списка в единую пару, потом прохожусь по их вариантам и обьединяю с соседним List изначальная последовательность: 123 у 1 могут быть {1,8,9} у 2 для удобства только {2} у 3 для удобства только {3} List<List<string>> | --List<string> {1,8,9} | --List<string> {2} | --List<> {3} Я теперь соединяю их проходясь сначала по первому Листу и рядом стоящему, потом полученные значения соединяю со следующим листом. Получается в итоге 123, 823, 923. Цель сделать данный алгоритм максимально менее затратным по ресурсам памяти.
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
04.09.2019, 13:07 | 5 |
Тогда с числами и надо работать. И не будет никакого оверхеда на конкатенации и всякие StringBuilder'ы.
2
|
Модератор
|
|
04.09.2019, 15:32 | 6 |
Насколько я понял.
Для каждой позиции задаются варианты значений. На выходе надо получить все возможные варианты общей комбинации? Если так здесь было несколько тем с хорошими решениями. Надо поискать. Может у меня в архивах что есть - посмотрю.
0
|
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
|
||||||
04.09.2019, 15:35 | 7 | |||||
а мне вот до сих пор непонятно
числа или цифры алгоритм примерно понятен ,
0
|
Модератор
|
||||||||||||
04.09.2019, 20:33 | 8 | |||||||||||
А разница какая?
Делал когда-то обобщённые методы. Принимают любые типы.
0
|
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
|
|
04.09.2019, 22:03 | 9 |
Ну как какая.. 0,1, 2, 3 ... 9 -- это цифры
А 10 это число. Мне то разницы нет особой. Ну наверное стоило уточнить ... Элд Хасп, это конечно хорошо сделано, но там задачка другая
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
04.09.2019, 22:10 | 10 |
0
|
Модератор
|
|
04.09.2019, 22:13 | 11 |
Именно та которую я сделал. Посмотрите в выводе консоль верхние строчки - показана работа именно на этом исходном наборе.
Добавлено через 2 минуты Я не знал как лучше сделать. string.Join нагляднее, удобнее.Но я опасаюсь, что будет слишком много мусора создавать. Поэтому использовал StringBuilder .
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
||||||
04.09.2019, 22:16 | 12 | |||||
там под капотом он и есть, даже вон пул билдеров
https://referencesource.micros... /string.cs
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
04.09.2019, 22:49 | 14 |
0
|
4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
|
|
15.09.2019, 13:13 [ТС] | 15 |
Так, я сделал, O(1), вроде как. Чуть позже пришлю код. Всем спасибо за помощь но по факту требовалось немного не то.
0
|
15.09.2019, 13:13 | |
15.09.2019, 13:13 | |
Помогаю со студенческими работами здесь
15
Записать в файл по очереди элементы List<string> и List<char> Сортировка двумерного List<List<string>>, по 1-ой строке, чтобы элементы 2-ой строки передвинулись в соответствии с 1-ой Разбить строки на символы и поместить их в List<List<string>> Как передать list<string> в поток и как такой же list<string> вывести из потока? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |