Как можно создать N элементов конкретного элемента в C #? - PullRequest
5 голосов
/ 12 февраля 2010

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

string element="?";
string sep=",";
int n=4;
// code to run and create ?,?,?,?
  • РЕДАКТИРОВАТЬ 1

Я смотрю по-простому. Вероятно, используя 1-2 строки кода. В c ++ есть массив fill () и объединения.

  • РЕДАКТИРОВАТЬ 2

Мне это нужно для Compact Framework

Ответы [ 13 ]

9 голосов
/ 12 февраля 2010

Используйте новый метод Enumerable.Repeat вместе с String.Join:

String.Join(sep, Enumerable.Repeat(element, n).ToArray());
3 голосов
/ 12 февраля 2010
var result = Enumerable.Repeat(element, n).DefaultIfEmpty("").Aggregate((s1, s2) => s1 + sep + s2);
2 голосов
/ 12 февраля 2010
static string BuildSeparatedString(string element, string sep, int count)
{
  StringBuilder sb = new StringBuilder();

  for (int i = 1; i <= count; i++)
  {
    sb.Append(element);

    if (i != count)
      sb.Append(sep);
  }
  return sb.ToString();
}

Это не модно, но и не загадочно. Любой, кто читает или поддерживает код, должен очень быстро его понять.

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

1 голос
/ 12 февраля 2010
static class Extensions
{
     public static string Times(this string s, int count)
     {
          StringBuilder sb = new StringBuilder(count * s.Length);
          for (int i = 0; i < count; i++)
          {
              sb.Append(s);
          }
          return sb.ToString();
     }
}

Использование:

Console.WriteLine("?,".Times(5).Trim(','));
1 голос
/ 12 февраля 2010

В C # я бы сделал:

StringBuilder sb = new StringBuilder();
string element="?";
string sep=",";
int n=4;

for (int x = 0; x < n; x++)
{
    sb.Append(element);
    sb.Append(sep);
}

if (sb.Length > 0)
{
    // remove the final separator
    sb.Length -= sep.Length;
}

Console.WriteLine(sb.ToString());
0 голосов
/ 12 февраля 2010

Вот еще одно однострочное выражение для выполнения того, что вы хотите (с помощью LINQ):

string.join(sep, (from x in Enumerable.Range(1, n) select element).ToArray())
0 голосов
/ 12 февраля 2010
string result = String.Join(sep,Enumerable.Repeat(element, n).ToArray());
0 голосов
/ 12 февраля 2010

Вот еще один вкладыш:)

 int n = 10;
 string element = "?";
 string sep = ",";

 string result = String.Join(sep, Enumerable.Range(0, n).Select(x => element).ToArray());
0 голосов
/ 12 февраля 2010
        string output = "?";
        int n = 4;
        while (n > 1)
        { output += "," + "?"; n--; }
0 голосов
/ 12 февраля 2010
string element = "?";
string sep = ",";
int n = 4;

string[] array = new string[n];

for (int i = 0; i < array.Length; i++) {
    array[i] = element;
}

string result = String.Join(sep, array);
...