Bazı koleksiyonları hızlı bir şekilde dizeye dönüştürmek ve ayırıcı ile ayırmak için C# işlevinde bir işlev var mı? ÖrneğinC# Liste <string> sınırlayıcı ile dize
:
List<string> names
->string names_together = "John, Anna, Monica"
Bazı koleksiyonları hızlı bir şekilde dizeye dönüştürmek ve ayırıcı ile ayırmak için C# işlevinde bir işlev var mı? ÖrneğinC# Liste <string> sınırlayıcı ile dize
:
List<string> names
->string names_together = "John, Anna, Monica"
Sen String.Join
kullanabilirsiniz. Eğer bir List<string>
varsa o zaman ToArray
ilk çağırabilirsiniz: Bir IEnumerable<string>
alır String.Join
bir aşırı yük olmadığından
List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());
.NET 4'te sen artık ToArray
gerekmez. Ben Quartermeister yanıtında olmayan linq sözdizimi tercih ederim ve Aggregate
yavaş (muhtemelen daha dize birleştirme işlemleri) gerçekleştirmek düşünüyorum olsa da
var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);
isterseniz
Ayrıca linq ile yapabilirsiniz.
List<string> targets = new List<string>();
var InboxChecked = true;
var BannerChecked = false;
var EmailChecked = true;
if (InboxChecked)
{
targets.Add("Inbox");
}
if (BannerChecked)
{
targets.Add("Banner");
}
if (EmailChecked)
{
targets.Add("Email");
}
var index = 0;
if (targets.Any())
{
var aggregate = targets.Aggregate((s1, s2) =>
{
return ++index == targets.Count - 1 ? s1 + " and " + s2 : s1 + ", " + s2;
});
// aggregate.Dump();
}
// returns -> Inbox and Email
Bu neden burada? OP ile neredeyse hiç ilgisi yok mu? – Assimilater
Hızlı yanıtlar için teşekkürler, her ikisi de iyi çalışıyor. Haklısın, Stopwatch sınıfını kullanarak küçük bir performans ölçümü yaptım ve linq-way çok daha yavaş: String.Join (",", names.ToArray()); -> 18 keneler aldı Agrega ((a, b) => a + "," + b) -> 736 keneler aldı – nan
Evet "Agrega" Matematik tipi işlemler için daha iyi olduğunu düşünüyorum. Bu işlem dizgilerle, her bir öğe için benzerdir ve sadece verimsiz olarak çok yavaş olan bir dizeye eklenir, çünkü listede bulunan her öğe için yeni bir dize yaratırsınız. – Bob
Bir çekirdek değeri olmayan Toplama, kapsayıcı boşsa InvalidOperationException atar. Hata işleme kodu veya koşullu kontrollerden kaçınmak için ekili sürüm Agrega (tohum, func) kullanın. String.Join boş bırakmaz, böylece tohum veya ekstra kod gerekmez ... Ayrıca Linq gerektirmez ve sözdizimi biraz daha nettir. – Huacanacha