У меня есть то, что сначала казалось тривиальной проблемой, но оказалось, что я не могу понять, как легко решить. Мне нужно иметь возможность хранить списки элементов в строке. Затем эти пункты в свою очередь могут быть списком, или некоторым другим значением, которое может содержать мой разделительный символ. У меня есть два разных метода, которые распаковывают два разных случая, но я понял, что мне нужно кодировать содержащееся значение из любых разделительных символов, используемых с string.Split.Как можно вставить вложенные разделители строк?
Чтобы проиллюстрировать эту проблему:
string[] nested = { "mary;john;carl", "dog;cat;fish", "plainValue" }
string list = string.Join(";", nested);
string[] unnested = list.Split(';'); // EEK! returns 7 items, expected 3!
Это будет производить список «Мария, Иоанна, CARL; собаки; кошки, рыбы, plainValue», значение я не могу разделить, чтобы получить три исходные вложенные строки из. Действительно, вместо трех исходных строк я бы получил 7 строк на split, и этот подход, таким образом, не работает вообще.
Я хочу, чтобы значения в моей строке были закодированы, чтобы я мог распаковать/разделить содержимое так, как только я упаковал/присоединился к ним. Я предполагаю, что мне, возможно, придется уйти от строки. Сплоть и string.Join, и это прекрасно. Я мог бы просто забыть о каком-то полезном классе или методе.
- Как я могу позволить любые строковые значения быть упакованы/распакованы в списки?
Я предпочитаю простые, простые решения по объему, если это возможно.
Для любознательного ума, я делаю расширение для PlayerPrefs в Unity3D, и я могу работать только с Интс, поплавки и строка. Таким образом, я выбрал строки для моего носителя данных. Вот почему я делаю этот вложенный список строк.
Множество ответов касалось просто замены символа разделителя. Это не реально жизнеспособно, оно слишком простое и слишком хрупкое. Это не будет легко разрешать «любой» контент в списке, и он не будет обрабатывать глубокие вложенные списки, так как вам нужно будет определить множество специальных символов спереди. До сих пор кодировка Base64 была лучшим кандидатом, поскольку она удаляла использование символов разделителя для каждого элемента, кодируя значения. Я хотел бы посмотреть, может ли кто-нибудь придумать решение, используя escape-символы или подобное. В противном случае ответ Base64 будет принят в качестве рабочего решения. – Statement