Перейти к содержимому

Как перевести из list в string c

  • автор:

List.To Array Метод

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Копирует элементы списка List в новый массив.

public: cli::array ^ ToArray();
public T[] ToArray ();
member this.ToArray : unit -> 'T[]
Public Function ToArray () As T()
Возвращаемое значение

Массив, содержащий копии элементов списка List .

Примеры

В следующем примере демонстрируется ToArray метод и другие методы List класса , которые действуют с диапазонами. В конце примера GetRange метод используется для получения трех элементов из списка, начиная с расположения индекса 2. Метод ToArray вызывается в результирующем List объекте , создавая массив из трех элементов. Отображаются элементы массива.

using namespace System; using namespace System::Collections::Generic; void main() < array^ input = < "Brachiosaurus", "Amargasaurus", "Mamenchisaurus" >; List^ dinosaurs = gcnew List((IEnumerable^) input); Console::WriteLine("\nCapacity: ", dinosaurs->Capacity); Console::WriteLine(); for each(String^ dinosaur in dinosaurs ) < Console::WriteLine(dinosaur); >Console::WriteLine("\nAddRange(dinosaurs)"); dinosaurs->AddRange(dinosaurs); Console::WriteLine(); for each(String^ dinosaur in dinosaurs ) < Console::WriteLine(dinosaur); >Console::WriteLine("\nRemoveRange(2, 2)"); dinosaurs->RemoveRange(2, 2); Console::WriteLine(); for each(String^ dinosaur in dinosaurs ) < Console::WriteLine(dinosaur); >input = gcnew array < "Tyrannosaurus", "Deinonychus", "Velociraptor">; Console::WriteLine("\nInsertRange(3, (IEnumerable^) input)"); dinosaurs->InsertRange(3, (IEnumerable^) input); Console::WriteLine(); for each(String^ dinosaur in dinosaurs ) < Console::WriteLine(dinosaur); >Console::WriteLine("\noutput = dinosaurs->GetRange(2, 3)->ToArray()"); array^ output = dinosaurs->GetRange(2, 3)->ToArray(); Console::WriteLine(); for each(String^ dinosaur in output ) < Console::WriteLine(dinosaur); >> /* This code example produces the following output: Capacity: 3 Brachiosaurus Amargasaurus Mamenchisaurus AddRange(dinosaurs) Brachiosaurus Amargasaurus Mamenchisaurus Brachiosaurus Amargasaurus Mamenchisaurus RemoveRange(2, 2) Brachiosaurus Amargasaurus Amargasaurus Mamenchisaurus InsertRange(3, (IEnumerable^) input) Brachiosaurus Amargasaurus Amargasaurus Tyrannosaurus Deinonychus Velociraptor Mamenchisaurus output = dinosaurs->GetRange(2, 3)->ToArray() Amargasaurus Tyrannosaurus Deinonychus */ 
using System; using System.Collections.Generic; public class Example < public static void Main() < string[] input = < "Brachiosaurus", "Amargasaurus", "Mamenchisaurus" >; List dinosaurs = new List(input); Console.WriteLine("\nCapacity: ", dinosaurs.Capacity); Console.WriteLine(); foreach( string dinosaur in dinosaurs ) < Console.WriteLine(dinosaur); >Console.WriteLine("\nAddRange(dinosaurs)"); dinosaurs.AddRange(dinosaurs); Console.WriteLine(); foreach( string dinosaur in dinosaurs ) < Console.WriteLine(dinosaur); >Console.WriteLine("\nRemoveRange(2, 2)"); dinosaurs.RemoveRange(2, 2); Console.WriteLine(); foreach( string dinosaur in dinosaurs ) < Console.WriteLine(dinosaur); >input = new string[] < "Tyrannosaurus", "Deinonychus", "Velociraptor">; Console.WriteLine("\nInsertRange(3, input)"); dinosaurs.InsertRange(3, input); Console.WriteLine(); foreach( string dinosaur in dinosaurs ) < Console.WriteLine(dinosaur); >Console.WriteLine("\noutput = dinosaurs.GetRange(2, 3).ToArray()"); string[] output = dinosaurs.GetRange(2, 3).ToArray(); Console.WriteLine(); foreach( string dinosaur in output ) < Console.WriteLine(dinosaur); >> > /* This code example produces the following output: Capacity: 3 Brachiosaurus Amargasaurus Mamenchisaurus AddRange(dinosaurs) Brachiosaurus Amargasaurus Mamenchisaurus Brachiosaurus Amargasaurus Mamenchisaurus RemoveRange(2, 2) Brachiosaurus Amargasaurus Amargasaurus Mamenchisaurus InsertRange(3, input) Brachiosaurus Amargasaurus Amargasaurus Tyrannosaurus Deinonychus Velociraptor Mamenchisaurus output = dinosaurs.GetRange(2, 3).ToArray() Amargasaurus Tyrannosaurus Deinonychus */ 
Imports System.Collections.Generic Public Class Example Public Shared Sub Main() Dim input() As String = < "Brachiosaurus", _ "Amargasaurus", _ "Mamenchisaurus" >Dim dinosaurs As New List(Of String)(input) Console.WriteLine(vbLf & "Capacity: ", dinosaurs.Capacity) Console.WriteLine() For Each dinosaur As String In dinosaurs Console.WriteLine(dinosaur) Next Console.WriteLine(vbLf & "AddRange(dinosaurs)") dinosaurs.AddRange(dinosaurs) Console.WriteLine() For Each dinosaur As String In dinosaurs Console.WriteLine(dinosaur) Next Console.WriteLine(vbLf & "RemoveRange(2, 2)") dinosaurs.RemoveRange(2, 2) Console.WriteLine() For Each dinosaur As String In dinosaurs Console.WriteLine(dinosaur) Next input = New String() < "Tyrannosaurus", _ "Deinonychus", _ "Velociraptor" >Console.WriteLine(vbLf & "InsertRange(3, input)") dinosaurs.InsertRange(3, input) Console.WriteLine() For Each dinosaur As String In dinosaurs Console.WriteLine(dinosaur) Next Console.WriteLine(vbLf & "output = dinosaurs.GetRange(2, 3).ToArray") Dim output() As String = dinosaurs.GetRange(2, 3).ToArray() Console.WriteLine() For Each dinosaur As String In output Console.WriteLine(dinosaur) Next End Sub End Class ' This code example produces the following output: ' 'Capacity: 3 ' 'Brachiosaurus 'Amargasaurus 'Mamenchisaurus ' 'AddRange(dinosaurs) ' 'Brachiosaurus 'Amargasaurus 'Mamenchisaurus 'Brachiosaurus 'Amargasaurus 'Mamenchisaurus ' 'RemoveRange(2, 2) ' 'Brachiosaurus 'Amargasaurus 'Amargasaurus 'Mamenchisaurus ' 'InsertRange(3, input) ' 'Brachiosaurus 'Amargasaurus 'Amargasaurus 'Tyrannosaurus 'Deinonychus 'Velociraptor 'Mamenchisaurus ' 'output = dinosaurs.GetRange(2, 3).ToArray ' 'Amargasaurus 'Tyrannosaurus 'Deinonychus 

Комментарии

Элементы копируются с помощью Array.Copy, который является операцией O(n), где n — .Count

Этот метод является операцией O(n), где n — .Count

Как конвертировать list в string[]?

Привет, обитатели тостера. Я только начал изучать C++. Я свободно работаю с ООП в PHP. Умею мыслить логически. Но понять си пока не могу.

Нужно мне отпарсить строку. Разбить ее на массив по разделителю (как explode в php). Нашел много обрывков кода. Пытаюсь собрать вместе. Но как же мне это сделать?

string* parse(string s, int sort = -1) < listwords; istringstream ist(s); string tmp; int i = 1; while (ist >> tmp) < words.push_back(tmp); i++; >string* string_array = new string[i]; switch (sort) < case -1: // UNSORTED copy(words.begin(), words.end(), ostream_iterator(cout, "\n")); break; case 0: // ASC words.sort(); copy(words.begin(), words.end(), ostream_iterator(cout, "\n")); break; case 1: // DESC words.sort(greater()); copy(words.begin(), words.end(), ostream_iterator(cout, "\n")); break; > return string_array; >

Код может разбить строку и вывести результат в консоль. А мне нужен результат в виде массива строк. 3 часа уже безрезультатно гуглю.

P.S. Если не трудно, объясните по русски, что такое iterator

  • Вопрос задан более трёх лет назад
  • 1104 просмотра

1 комментарий

Оценить 1 комментарий

Да, вообще-то, там вектор надо сделать, заполнить его и вернуть.
Решения вопроса 1
Программист на «си с крестами» и не только

5f40aef227644b9ca57224ffeb571a97.png

Итератор — это объект с семантикой указателя, который может указывать на N+1 точку в объекте.

Раз он с семантикой указателя, у него есть операции «унарная звезда» и −> (разыменование и разыменование+взятие поля). Также у итератора есть операция ++ (сдвинуться на следующую позицию). Если это т.н. «однонаправленный итератор» — всё, больше ничего.

Также бывают т.н. двунаправленные итераторы (есть операция −−), и итераторы произвольного доступа (их можно свободно складывать с числами — ну совсем как указатели). В частности, у std::list итераторы двунаправленные.

У итераторов неопределённое поведение…
• при попытке выйти за начало или конец;
• при попытке разыменовать, если он смотрит на последнюю позицию (отмеченную как «конец»).

Конкретно о задаче.
1. std::vector предпочтительнее std::list.
2. Не нужно возвращать string*, хватает какого-нибудь контейнера (std::vector или std::list).
3. Если функциональности и скорости istringstream хватает, флаг в руки! Я бы написал по хардкору, с нуля. Вот мой код, выдранный из моего проекта, наверно, будет несложно переделать его в учебный.

void parseCommaList( const char *aStart, // указатель на начало const char *aEnd, // указатель на символ за концом char aComma, // символ-разделитель bool aSkipEmpty, // true, если пустые подстроки пропускать ProcParseCommaList aCallback, // функция-нагрузка void *aData) // этот параметр нужен, чтобы передавать какие хочешь данные в функцию-нагрузку, удаляй его смело! < str::trim(aStart, aEnd); // моя функция; пододвигает aStart вперёд и aEnd назад, убирая пробелы. // Если удаление пробелов не нужно — удаляй! Если нужно — пиши сам. if (aStart == aEnd) return; const char *sstart = aStart; for (const char *p = aStart; p != aEnd; ++p) < if (*p != aComma) continue; const char *send = p; str::trim(sstart, send); // то же самое, можно убрать if (p != sstart || !aSkipEmpty) aCallback(sstart, send, aData); // замени на боевую нагрузку sstart = p + 1; >str::trim(sstart, aEnd); // то же самое, можно убрать if (sstart != aEnd || !aSkipEmpty) aCallback(sstart, aEnd, aData); // замени на боевую нагрузку >

И, соответственно, версия для std::string.

inline void parseCommaList( const std::string &aIn, char aComma, bool aSkipEmpty, ProcParseCommaList aCallback, void *aData)

3 варианта, как сконвертировать список(list) в строку в Python 3

Это метод строк — он берет список и соединяет элементы списка в строку.

1. Если у вас список строк, можно просто использовать join.

my_list = ["Pythonist.ru", "-", "хороший", "сайт", "по","Python"] print(" ".join(my_list)) >>>Pythonist.ru - хороший сайт по Python

2. Если это список чисел, вы можете использовать map() для приведения всех элементов списка к строке, а потом просто склеить их в одну строку методом join()

my_list2 = [66, 77, 88, 99] print(" ".join(map(str, my_list2))) >>> 66 77 88 99

3. Если вы хотите получить разделенные запятой строки, можно использовать такой shortcut кода:

my_list3 = [11, 22, 33, 44, 55] print(str(my_list3).strip('[]')) >>> 11, 22, 33, 44, 55

Больше 50 задач по Python c решением и дискуссией между подписчиками можно посмотреть тут

Преобразование списка в строку в Kotlin

Списки (Lists) — одна из основных коллекций в Kotlin, и преобразование набора элементов в простую строку — довольно распространенный вариант использования. В этом уроке мы узнаем, как легко преобразовать List в String в Kotlin.

Преобразование списка в строку с помощью joinToString

Kotlin Collections API имеет множество полезных методов для выполнения операций над коллекциями. Один из них — joinToString. Этот метод создает строку из всех элементов коллекции. Разделителем по умолчанию является запятая.

Давайте определим наш список и проверим вывод joinToString:

val numbers = listOf(11, 22, 3, 41, 52, 6) val string = numbers.joinToString() assertEquals("11, 22, 3, 41, 52, 6", string)

Мы можем определить параметры разделителя, префикса и суффикса для настройки выходной строки:

val numbers = listOf(11, 22, 3, 41, 52, 6) val string = numbers.joinToString(prefix = "", separator = "") assertEquals("", string)

Мы также можем установить ограничение, если наш список слишком длинный, и мы даже можем установить лямбда-преобразование:

val chars = charArrayOf('h', 'e', 'l', 'l', 'o', 'o', 'o', 'o') val string = chars.joinToString(separator = "", limit = 5, truncated = "!") < it.uppercaseChar().toString() >assertEquals("HELLO!", string)

Добавление списка к существующему тексту с помощью joinTo

Если у нас уже есть строка или фрагмент текста и мы хотим добавить к нему элементы нашего списка, мы можем использовать метод joinTo. Он добавляет строку, сформированную из всех элементов списка, к существующей строке с помощью StringBuilder. Как и в предыдущем примере, если мы указываем параметры, мы можем настроить нашу выходную строку:

val sb = StringBuilder("An existing string and a list: ") val numbers = listOf(11, 22, 3, 41, 52, 6) val string = numbers.joinTo(sb).toString() assertEquals("An existing string and a list: 11, 22, 3, 41, 52, 6", string)

На самом деле, joinTo принимает любой класс, реализующий интерфейс Appendable, в качестве буферного аргумента. Однако в стандартной библиотеке это делает только StringBuilder. Метод возвращает тот же тип, что и его аргумент буфера, поэтому, скорее всего, это будет StringBuilder.

Создание строки из списка с обратной связью с reduce и fold

Мы также можем использовать функцию сокращения для формирования строки из списка. Функция reduce накапливает значение, начиная с первого элемента. Затем он применяет операцию слева направо к текущему аккумулятивному значению и каждому последующему элементу. Поэтому каждое следующее аккумулятивное значение может зависеть от того, какое значение он уже содержит:

val strings = listOf("a", "b", "a", "c", "c", "d", "b", "a") val uniqueSubstrings = strings.reduce < acc, string ->if(string !in acc) acc + string else acc > assertEquals("abcd", uniqueSubstrings)

Как написано, этот код будет создавать новый экземпляр String на каждой итерации. Это означает, что для больших коллекций такой подход может сильно сказаться на производительности приложения.

Во-вторых, пустую коллекцию нельзя уменьшить; вместо этого она выдает исключение. Итак, мы должны внимательно следить за частью нашего кода, где мы используем сокращение.

Другим подходом к той же задаче может быть функция fold. Это сокращение, как joinTo для joinToString — мы должны предоставить начальное значение, которое используется в качестве аккумулятора на первой итерации:

val strings = listOf("a", "b", "a", "c", "c", "d", "b", "a") val uniqueSubstrings = strings.fold(StringBuilder()) < acc, string ->if(string !in acc) acc.append(string) else acc > assertEquals("abcd", uniqueSubstrings.toString())

Таким образом, мы можем использовать StringBuilder для нашей коллекции, избегая проблем с памятью и производительностью, связанных с уменьшением.

Циклы

Наконец, мы можем использовать простую конкатенацию для построения строки символ за символом. Мы можем сделать это, перебирая список и объединяя каждый символ в строку по одному. Давайте посмотрим пример:

val elements = listOf("a", "b", "c", "d", "e") var string = "" for(s in elements) < string += s >assertEquals("abcde", string)

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

val letters = listOf("a", "b", "c", "d", "e", "f") val builder = StringBuilder() for(s in letters) < builder.append(s) >assertEquals("abcdef", builder.toString())

На самом деле, в Kotlin есть хороший синтаксический сахар, который делает работу с StringBuilder более удобной:

val letters = listOf("a", "b", "c", "d", "e", "f") val alreadyAString = buildString < for(s in letters) append(s) >// `this` is a StringBuilder inside the lambda assertEquals("abcdef", alreadyAString)

Чтобы настроить вывод, мы можем использовать встроенную функцию, такую как removeSuffix(), после возврата StringBuilder в виде строки:

val letters = listOf("a", "b", "c", "d", "e", "f") val string = buildString < letters.forEach(::append) >val withoutSuffix = string.removeSuffix("f") assertEquals("abcde", withoutSuffix)

Заключение

В этой статье мы рассмотрели наиболее распространенные способы преобразования списка в строку в Kotlin. Использование встроенных функций Котлин позволяет сделать наш код чище и следовать соглашениям языка.

Средняя оценка 0 / 5. Количество голосов: 0

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *