2010-02-12 2 views
5

Ich suche nach einer Möglichkeit, N Fragezeichen zu erzeugen, die mit Komma verbunden sind.Wie können N Elemente eines bestimmten Elements in C# erstellt werden?

string element="?"; 
string sep=","; 
int n=4; 
// code to run and create ?,?,?,? 
  • EDIT 1

ich auf einfache Weise suchen. Wahrscheinlich mit 1-2 Zeilen Code. In C++ gibt es Array fill() und Joins.

  • EDIT 2

Ich brauche dies für Compact Framework

Antwort

1
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(); 
    } 
} 

Usage:

Console.WriteLine("?,".Times(5).Trim(',')); 
1

In C# würde ich tun:

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

Was passiert, wenn 'sep' nicht ein einzelnes Zeichen ist? –

+0

Guter Punkt. Aktualisiert. –

+0

So habe ich es auch immer gemacht –

0

Nicht kurz, aber es wird den Trick tun ..

StringBuilder sb = new StringBuilder(); 
sb.Append(element); 
for(int i = 1; i < n; i++){ 
    sb.Append(sep); 
    sb.Append(element); 
} 
string output = sb.toString(); 
0
StringBuilder sb = new StringBuilder(); 
for(int i=0;i<n;i++) 
    sb.Append((i != n-1) ? "?," : "?"); 
string result = sb.ToString(); 
0

Eine Zeile

String s = "".PadLeft(n-1, 'X').Replace("X", element+sep) + element; 
+0

Ich denke, das wurde downvoted, weil es für n == 0 fehlschlägt? – finnw

0
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); 
0
 string output = "?"; 
     int n = 4; 
     while (n > 1) 
     { output += "," + "?"; n--; } 
+0

Steigt das nicht exponentiell? Sie enden mit "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?" d.h. 16? ist nicht die erforderliche 4! – Grhm

+0

und wie ist das? –

+0

probieren Sie es aus und Sie werden sehen – Pentium10

2
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(); 
} 

Es ist nicht extravagant ist, aber noch ist es ein kryptischer Einzeiler. Jeder, der den Code liest oder verwaltet, sollte dies sehr schnell verstehen.

Durch einige schnelle Tests läuft dies auch fast doppelt so schnell wie die beiden beliebtesten One Liner.

3
var result = Enumerable.Repeat(element, n).DefaultIfEmpty("").Aggregate((s1, s2) => s1 + sep + s2); 
+0

Obwohl das schwierig ist, ist es viel zu kompliziert. –

+0

was wäre der lange Pfad für Enumerable zB: System.Collections. Generic.Enumerable .....? Ich kann es nicht finden. Ich bin CompactFramework. – Pentium10

+0

Es ist System.Linq.Enumerable in System.Core, aber ich weiß nicht, ob es in CF ist. –

9

Verwenden der neue Enumerable.Repeat Verfahren in Verbindung mit String.Join:

String.Join(sep, Enumerable.Repeat(element, n).ToArray()); 
+0

+1, weit besser lesbar als die angenommene Antwort –

+0

+1 vergessen, wiederholen. –

+0

was wäre der lange Weg für Enumerable zB: System.Collections. Generic.Enumerable .....? Ich kann es nicht finden. Ich bin CompactFramework. – Pentium10

0

Hier ist ein Motto als auch :)

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

string result = String.Join(sep, Enumerable.Range(0, n).Select(x => element).ToArray()); 
+0

was wäre der lange Weg für Enumerable zB: System.Collections. Generic.Enumerable .....? Ich kann es nicht finden. Ich bin CompactFramework. – Pentium10

+0

Es stellt sich heraus, dass es mir nicht hilft, da ich nicht auf Compact Framework 3.5 bin. Trotzdem vielen Dank für die Mühe, ich werde andere verwenden. – Pentium10

+0

kein Problem, Sie haben viele Möglichkeiten zur Auswahl. –

0
string result = String.Join(sep,Enumerable.Repeat(element, n).ToArray()); 
+0

Es stellt sich heraus, dass es mir nicht hilft, da ich nicht auf Compact Framework 3.5 bin. Trotzdem vielen Dank für die Mühe, ich werde andere verwenden. – Pentium10

0

Hier ist ein weiterer einzeiligen Ausdruck zu tun, was Sie (mit LINQ) wollen:

string.join(sep, (from x in Enumerable.Range(1, n) select element).ToArray()) 
+0

Es stellt sich heraus, dass es mir nicht hilft, da ich nicht auf Compact Framework 3.5 bin. Trotzdem vielen Dank für die Mühe, ich werde andere verwenden. – Pentium10

Verwandte Themen