C # string.Join с множественным разделителем - PullRequest
0 голосов
/ 25 марта 2011

Я искал в Google и во всех других ссылках, но не смог выяснить, возможно ли это.

string.Join ссылка на метод http://msdn.microsoft.com/en-us/library/system.string.join.aspx

Join(String, String[]), я понимаю, что первый аргумент (String) - это разделитель, а второй аргумент (String[]) - это массив, к которому мы хотим присоединиться. Возможно ли объединить его с двумя разными строками / разделителями? например, мой массив>

array[0] = A;
array[1] = Alpha; 
array[2] = B; 
array[3] = Bravo;

такой, как конечный продукт:

A = Alpha, B= Bravo, 

Так что это будет 2 строки, "=" и ",". Любое предложение сделать это?

Ответы [ 6 ]

3 голосов
/ 25 марта 2011

ОБНОВЛЕНО: оба кода , если вы не хотите , в конце.

Вы можете сделать это, но предложили соединить key и value или использовать 2-мерный массив.

КОД:

int i=0;
string str = "";
var arr = new string[] { "A", "Alpha", "B", "Bravo" };

foreach (var item in arr)
 {
    str += item;
    if (i < arr.Length-1)
    {
       if (i % 2 == 0)                
         str += " = ";               
       else
         str += ", ";          
    }
    i++;
 }
//output: A = Alpha, B = Bravo


Таким образом, вы также можете использовать несколько разделителей.

Пример: * ** 1022 тысячу двадцать одна * int i=0; string str = ""; var arr = new string[] { "A", "Alpha", "1", "B", "Bravo", "2" }; var delimiters = new string[] { " = ", ", ", ":" }; foreach (var item in arr) { str += item; if (i < arr.Length-1) { if (i % 3 == 0) str += delimiters[0]; else if (i % 3 == 1) str += delimiters[1]; else str += delimiters[2]; } i++; } //output: A = Alpha:1, B = Bravo:2

3 голосов
/ 25 марта 2011

Вам необходимо сгруппировать значения попарно, используйте string.Join для каждой пары (или просто используйте key + " = " + value), а затем используйте string.Join для результатов.

String.Join не поддерживает эту функцию "из коробки".

В качестве альтернативы, вы можете просто написать собственный цикл, чтобы сделать это.

1 голос
/ 25 марта 2011

Этот метод расширений должен помочь:

public static class Extensions
{
    public static string Join(this object[] array, string[] delimiters)
    {
        var returnString = "";
        var s = new Queue<string>(delimiters);
        for (var i = 0; i < array.Count(); i++)
        {
            var delim = s.Dequeue();
            returnString += array[i] + delim;
            s.Enqueue(delim);
        }
        while (s.Count > 0) returnString = returnString.TrimEnd(s.Dequeue().ToCharArray());
        return returnString;

    }
}

Вы можете использовать array.Join(new string[] {"=", ","}) Метод extension чередует разделители.

Надеюсь, это поможет!

1 голос
/ 25 марта 2011

Я не думаю, что это возможно. Вы можете просто Join на ,, а затем выполнить цикл и заменить все остальные , на =.

0 голосов
/ 25 марта 2011

Надеюсь, это то, что вы ищете;)

string[] str = { "A", "Alpha", "B", "Beta" };
string[] dl = { " = ", ", " };
string result = "";
for (int i = 0; i < str.Length; i++)
{
    result += str[i] + dl[0] + str[i + 1];
    if(i != str.Length - 2){
        result += dl[1];
    }
    i++;
}
return result;

^^

0 голосов
/ 25 марта 2011
 StringBuilder output = new StringBuilder();

 for(int i = 0; i <= array.length; i++)
 {
         output.Append(array[i] + "=" + array[i+1]);
         if(i != array.length) output.Append(",");
 }

 Response.Write(output.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...