У меня есть это в строке, созданной из списка, как я могу добавить пустое значение между строкой.
using (var file = File.CreateText()
{
foreach (var permutation in result)
{
file.WriteLine(string.Join(",", permutation));
//i++;
}
}
Вот результат:
результат строки = A,B,C,D,E,F,G,H,I,J
Как я могу добавить пустое значение "," в результат по определенному индексу
Пример: A,B,C,D,E,F, ,G,H,I,J
Примечание: результат представляет собой перестановку, а длина не соответствует
Результат - IEnumerable, можно ли его разделить?
Кстати, если бы элемент был в коллекции permutation, то результат был бы хорошим, и вам не пришлось бы его модифицировать. Какой тип var permutation?





Вы можете разделить строку с помощью запятой в качестве разделителя, пройтись по своим символам и добавить их в список. Добавьте дополнительную пустую строку в желаемый индекс и снова соедините данные. Таким образом, вам не нужно решать, нужно ли добавлять запятую или нет при объединении строк.
var index = 6;
var data = "A,B,C,D,E,F,G,H,I,J";
var chars = data.Split(new [] { ',' });
List<string> resultData = new List<string>();
var i = 0;
foreach (var c in chars) {
if (i == index) {
resultData.Add(" ");
}
i++;
resultData.Add(c);
}
var result = string.Join(",", resultData.ToArray();
забыл добавить, что результатом является IEnumerable<string>, можно ли его разделить?
Если ваши исходные данные уже являются IEnumerable<string>, вы можете просто оставить разделяющую часть и использовать эти данные в цикле foreach в коде.
Вы можете использовать следующий базовый алгоритм, чтобы следовать логике кода ваших вопросов:
using (var file = File.CreateText())
{
int i = -1;// Loop counter
int termReplacementIndex = 3;// Input or constant to find letter to replace
foreach (var permutation in result)
{
i++;
if (i == ((termReplacementIndex * 2) - 2))// Only stops on letters not commas
{
file.WriteLine(string.Join(",", " ,"));// Adding of blank " "
}
file.WriteLine(string.Join(",", permutation));// Adding of letter
}
}
В противном случае вы можете использовать массив, чтобы разбить строку на символы, разделив их на запятые.
Если перестановка представляет собой список, вы можете просто вставить нулевое значение в требуемый индекс:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var list = new List<string>();
list.Add("test 1");
list.Add("test 2");
list.Add("test 3");
list.Insert(2, null);
var str = string.Join(",", list);
Console.WriteLine(str); // test 1,test 2,,test 3
}
}
Измените коллекцию, прежде чем присоединиться к ней, чтобы вам не пришлось разбивать ее и повторять снова.
Поскольку сторона permutation варьируется, вы можете попытаться вставить по индексу X, когда X больше больше permutation.Count() вместо ArgumentOutOfRangeException. Я решил добавить элемент в конце. Но вам придется определить это.
public string CsvProjection(List<string> inputs, int needleIndex, string needleValue)
{
if (needleIndex < 0)
{
throw new ArgumentOutOfRangeException("needleIndex must be positive.");
}
if (needleIndex > inputs.Count())
{//Either throw an exception because out of bound or add to the end
inputs.Add(needleValue);
}
inputs.Insert(needleIndex, needleValue);
return string.Join(",", inputs);
}
Использование просто добавляет значение и индексную переменную:
var needleIndex= 2;
var needleValue = "My New Value";
using (var file = File.CreateText()
{
foreach (var permutation in result)
{
file.WriteLine(CsvProjection(permutation, needleIndex, needleValue));
}
}
нахрена это "игла"?
@Nyerguds, исправлено. это была опечатка E и D очень близки. Во всем виновата дислексия или пятничная почта. Поиск «C# Needle insert» и «C# NeedleIndex» дал много близких результатов. Так что я думаю, что слово «игла» здесь не используется неправильно. Для вставки одного элемента в массив с этой идеей указать, где именно. Но мой английский плохой, это может быть просто неправильный термин.
используйте цикл
for, вы легко узнаете свой индекс.