2010-02-12 17 views
5

Szukam sposobu na wygenerowanie N kawałków znaków zapytania połączonych przecinkiem.Jak utworzyć N elementów określonego elementu w języku C#?

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

szukam w prosty sposób. Prawdopodobnie używa 1-2 linii kodu. W języku C++ istnieje tablica fill() i sprzężenia.

  • EDIT 2

muszę to dla Compact Framework

Odpowiedz

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

Zastosowanie:

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

W języku C# to zrobić:

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

Co jeśli 'sep' nie jest pojedynczym znakiem? –

+0

Dobra uwaga. Zaktualizowano. –

+0

To jest sposób, w jaki zawsze to robiłem. –

0

Nie zwięzły ale będzie to rade ..

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

Jedna linia

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

Domyślam się, że zostało ono odrzucone, ponieważ nie udało się n == 0? – 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

Czy to nie rośnie wykładniczo? Kończysz słowami "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?" tj. 16? nie jest wymagane 4! – Grhm

+0

i jak to jest? –

+0

wypróbuj to i zobaczysz – 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(); 
} 

To nie jest wyszukane, ale nie jest to tajemnicze jeden liner. Każdy, kto czyta lub konserwuje kod, powinien bardzo szybko to zrozumieć.

Dzięki szybkiemu testowi działa to prawie dwa razy szybciej niż dwie najpopularniejsze wkładki.

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

Chociaż jest to trudne, jego sposób jest zbyt skomplikowany ... –

+0

jaka byłaby długa ścieżka dla wartości zmiennych np. System.Collections. Generic.Enumerable .....? Nie mogę tego znaleźć. Jestem CompactFramework. – Pentium10

+0

It's System.Linq.Enumerable w System.Core, ale nie wiem, czy to również w CF. –

9

pomocą nowej metody Enumerable.Repeat w połączeniu z string.join:

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

+1, o wiele bardziej czytelny niż przyjęta odpowiedź –

+0

+1 zapomniałem o powtórzeniu. –

+0

jaka byłaby długa ścieżka do zmiennej np. System.Collections. Generic.Enumerable .....? Nie mogę tego znaleźć. Jestem CompactFramework. – Pentium10

0

Oto jeden liniowej i :)

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

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

jaka byłaby długa ścieżka do zmiennej np. System.Collections. Generic.Enumerable .....? Nie mogę tego znaleźć. Jestem CompactFramework. – Pentium10

+0

Okazuje się, że to mi nie pomoże, ponieważ nie jestem na Compact Framework 3.5. W każdym razie dzięki za wysiłek, użyję innego. – Pentium10

+0

nie ma problemu, masz wiele możliwości do wyboru. –

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

Okazuje się, że to mi nie pomaga, ponieważ nie jestem na Compact Framework 3.5. W każdym razie dzięki za wysiłek, użyję innego. – Pentium10

0

Oto kolejny wyraz jedna linia robić to, co chcesz (z LINQ):

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

Okazuje się, że to mi nie pomoże, ponieważ nie jestem na Compact Framework 3.5. W każdym razie dzięki za wysiłek, użyję innego. – Pentium10

Powiązane problemy