W PerlJaki jest ekwiwalent C# operatora powtórzeń Perla?
print "a" x 3; # aaa
W języku C#
Console.WriteLine(???)
W PerlJaki jest ekwiwalent C# operatora powtórzeń Perla?
print "a" x 3; # aaa
W języku C#
Console.WriteLine(???)
To zależy, co trzeba ... jest new string('a',3)
na przykład.
Do pracy z ciągami; mógłbyś po prostu zapętlić ... niezbyt interesujące, ale zadziała.
Z wersją 3.5 można użyć Enumerable.Repeat("a",3)
, ale daje to ciąg ciągów, a nie ciąg złożony.
Jeśli masz zamiar użyć tego dużo, można użyć zamówienie metody C# 3.0 extension:
static void Main()
{
string foo = "foo";
string bar = foo.Repeat(3);
}
// stuff this bit away in some class library somewhere...
static string Repeat(this string value, int count)
{
if (count < 0) throw new ArgumentOutOfRangeException("count");
if (string.IsNullOrEmpty(value)) return value; // GIGO
if (count == 0) return "";
StringBuilder sb = new StringBuilder(value.Length * count);
for (int i = 0; i < count; i++)
{
sb.Append(value);
}
return sb.ToString();
}
Jeśli trzeba tylko powtórzyć pojedynczy znak (jak w przykładzie), to będzie działać :
Działa tylko dla "nowego ciągu (CHAR, COUNT)", a nie dla ciągów. – Tom
To prawda, ale spełnia to wymaganie w pytaniu. – GeekyMonkey
Operator powtórzeń Perla działa tylko na znaki? Fakt, że użył ciągu składającego się z pojedynczego znaku, nie powinien był Cię przysłać, aby ograniczyć odpowiedź do tego konkretnego przykładu. Pytanie było bardziej ogólne. – Tom
Jeśli chcesz zrobić to za pomocą łańcuchów takich jak Tom, to metoda rozszerzenia będzie dobrze działać.
static class StringHelpers
{
public static string Repeat(this string Template, int Count)
{
string Combined = Template;
while (Count > 1) {
Combined += Template;
Count--;
}
return Combined;
}
}
class Program
{
static void Main(string[] args)
{
string s = "abc";
Console.WriteLine(s.Repeat(3));
Console.ReadKey();
}
Do pracy w pętli takiej jak ta, zalecane byłoby użycie StringBuilder ... concatenation jest w porządku dla 2-lub-3, ale jeśli ktoś prosi o "a" .Repeat (100) masz wiele niepotrzebnych ciągów do zebrać. –
To prawda. Istnieje pewien moment, w którym StringBuilder staje się bardziej wydajny. Słyszałem, że jest około 10. W podanym przykładzie miał 3, więc zakładałem, że będzie mały. Jeśli chcesz objąć szerszy zakres, wówczas wprowadzenie "jeśli" i użycie StringBuilder dla ponad 10 będzie bardziej wydajne. – GeekyMonkey
dobrze we wszystkich wersji .NET powtórzyć ciąg zawsze można to zrobić
public static string Repeat(string value, int count)
{
return new StringBuilder().Insert(0, value, count).ToString();
}
Marc nie myślisz StringBuilder(). Wkładki (0, wartość, liczą) jest lepszy? –
Dobre miejsce; po prostu nie widziałem przeciążenia ... –