Mam HashSet<string>
, który jest dodawany okresowo. Chcę tylko rzucić cały HashSet na ciąg bez wykonywania pętli foreach. Czy ktoś ma przykład?C# cała zawartość HashSet <string>
Odpowiedz
Zapętlisz zawartość, bez względu na to, czy piszesz jedno, czy nie.
Jednak, aby zrobić to bez wyraźnej pisemnej, a jeśli przez „cast” znaczy „łączyć”, by napisać coś takiego
string output = string.Join("", yourSet); // .NET 4.0
string output = string.Join("", yourSet.ToArray()); // .NET 3.5
+1, ale także warto zauważyć, że wersja .NET 3.5 jest "gorsza" niż jawna pętla: wymaga dwóch przebiegów przez dane (jedna dla wywołania "ToArray" i jedna dla połączenia "Join") i dodatkowe alokacja (tablica generowana przez 'ToArray'). – LukeH
Podoba mi się odpowiedź @ Briana - daje ci nawet kontrolę nad tym, co pętla powinna umieścić między wartościami: string.Join (",", set). Czy byłyby powody, by preferować powyższą składnię 4.0? –
Jeśli chcesz jeden ciąg znaków, który jest połączeniem wartości w HashSet, to powinno działać ...
class Program
{
static void Main(string[] args)
{
var set = new HashSet<string>();
set.Add("one");
set.Add("two");
set.Add("three");
var count = string.Join(", ", set);
Console.WriteLine(count);
Console.ReadKey();
}
}
Jeśli chcesz jeden sposób, aby uzyskać wszystkie elementy na Hashset za łączone, można utworzyć metodę rozszerzenia.
[] 's
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
HashSet<string> hashset = new HashSet<string>();
hashset.Add("AAA");
hashset.Add("BBB");
hashset.Add("CCC");
Assert.AreEqual<string>("AAABBBCCC", hashset.AllToString());
}
}
public static class HashSetExtensions
{
public static string AllToString(this HashSet<string> hashset)
{
lock (hashset)
{
StringBuilder sb = new StringBuilder();
foreach (var item in hashset)
sb.Append(item);
return sb.ToString();
}
}
}
Można używać LINQ:
hashSet.Aggregate((a,b)=>a+" "+b)
który wstawia spacje między dwoma elementami swojej HashSet
- 1. Czy .NET 4 ISet <> HashSet <> zastępuje NHibernate Iesi.Collections ISet, HashSet?
- 2. C# Hashset Zawiera nieunikalne Przedmioty
- 3. C# Hashset konwersja na listy
- 4. Java HashSet equiv in C++
- 5. Wywołanie Distinct <>() na HashSet <T>
- 6. C# HashSet <T> wydajność wyszukiwania (w porównaniu do ObservableCollection <T>)?
- 7. Jedna kontra cała regresja
- 8. Skąd HashSet <T> przechodzi w VS2012?
- 9. pobrać obiekt z HashSet w C#
- 10. C# - definiowanie hashset z niestandardowym kluczem
- 11. HashSet umożliwia zdublowane wstawianie elementów - C#
- 12. Pobierz losowy element z C# HashSet szybko
- 13. MVC RequireHttps cała witryna
- 14. Jak wydrukować zawartość pamięci zmiennej w C?
- 15. HashSet <T> w systemie Windows Phone 7
- 16. Konwertuj zestaw HashSet <T> na tablicę w .NET
- 17. Zawiera z HashSet <Integer> w Pythonie
- 18. Sortowanie Hashset .Net 3.5
- 19. Cała aplikacja internetowa w C++ z interakcją DOM
- 20. Cała kompilacja strony markdown/pandoc?
- 21. Wyodrębnianie zawartość z <![CDATA []]>
- 22. Korzyści z konwertowania listy <String> na HashSet <String> Java
- 23. Dlaczego program HashSet <T> nie implementuje IReadOnlyCollection <T>?
- 24. Definiowanie: Co to jest HashSet?
- 25. Skopiuj pojedyncze elementy szybciej niż cała struktura?
- 26. Najlepszy sposób poszukiwania HashSet
- 27. Zmiana wartości w HashSet
- 28. HashSet nie sortuje?
- 29. Kolizje HashSet w Javie
- 30. HashSet jako DataSource
Pojedynczy łańcuch? Jak w konkatenacji wartości? – Brian
Jestem ciekaw czegoś. Widziałem * dziesiątki * pytań SO z formularza "Chcę zrobić coś, co oczywiście wymaga pętli, a ja nie chcę używać pętli". ** Dlaczego? ** Skąd ta nienawiść ma ludzi do pętli? –
Myślę, że ludzie chcą poprawić semantyczną klarowność swojego kodu. Gdybyś miał 'mySet.ItemsAsOneBigString()' zamiast 'StringBuilder sb = new StringBuilder(); foreach (String s in myset) sb.append (s); return sb.ToString(); 'Tak, jest mały, ale tak samo jest w wielu innych modułach kostek syntaktycznych i szkieletowych C#, które sprawiają, że kod jest bardziej czytelny do odczytania i określenia intencji. – jasonh