Czy istnieje wbudowana funkcja do przekształcania tablicy łańcuchów znaków w słownik ciągów znaków lub czy należy tutaj wykonać pętlę?Najbardziej elegancki sposób na konwersję tablicy ciągów znaków do słownika łańcuchów znaków
Odpowiedz
Zakładając, że używasz .NET 3.5, można włączyć dowolną sekwencję (tj IEnumerable<T>
) do słownika:
var dictionary = sequence.ToDictionary(item => item.Key,
item => item.Value)
gdzie Key
i Value
są odpowiednie właściwości chcesz działać jako klucz i wartość. Możesz określić tylko jedną projekcję, która jest używana dla klucza, jeśli sam przedmiot jest wartością, którą chcesz.
Tak na przykład, jeśli chcesz mapować górną obudowę wersję każdej struny do oryginału, można użyć:
var dictionary = strings.ToDictionary(x => x.ToUpper());
W twoim przypadku, co chcesz, klucze i wartości być?
Jeśli faktycznie tylko chcesz ustawić (co można sprawdzić, czy zawiera określony ciąg znaków, na przykład), można użyć:
var words = new HashSet<string>(listOfStrings);
Ten plik RIS jest zawsze dostępny, chyba że wcześniej sprawdziłeś, czy nie zawiera on duplikatów kluczy. – Dykam
@Dykam: Rzeczywiście. Jeśli chcesz obsługiwać duplikaty, możesz zamiast tego użyć 'ToLookup'. Mamy nadzieję, że dowiemy się więcej, jeśli OP wyjaśni, co naprawdę próbują zrobić. –
Super! Co się stanie, jeśli mam ciąg tablic kluczy i tablicę znaków o tej samej długości? Czy może mi pomóc Linq? –
Co masz na myśli?
Słownik to skrót, w którym klucze są mapowane na wartości.
Jakie są Twoje klucze i jakie są Twoje wartości?
foreach(var entry in myStringArray)
myDictionary.Add(????, entry);
Można użyć LINQ to zrobić, ale pytanie, że Andrzej pyta najpierw należy odpowiedzieć (jakie są twoje klucze i wartości):
using System.Linq;
string[] myArray = new[] { "A", "B", "C" };
myArray.ToDictionary(key => key, value => value);
wynik jest słownikiem tak:
A -> A
B -> B
C -> C
Jeśli potrzebujesz słownika bez wartości, może trzeba HashSet
:
var hashset = new HashSet<string>(stringsArray);
IMO, Gdy mówimy o Array
mówimy o listę wartości, które możemy uzyskać wartość z nazywając swój indeks (value => array [index]), więc poprawny słownik jest słownikiem z kluczem indeksu.
A dzięki dzięki @John Skeet, właściwą drogą do osiągnięcia tego celu jest:
var dictionary = array
.Select((v, i) => new {Key = i, Value = v})
.ToDictionary(o => o.Key, o => o.Value);
Innym sposobem jest użycie metody rozszerzenie takiego:
public static Dictionary<int, T> ToDictionary<T>(this IEnumerable<T> array)
{
return array
.Select((v, i) => new {Key = i, Value = v})
.ToDictionary(o => o.Key, o => o.Value);
}
To będzie a) nieefektywne; b) nie działa, jeśli ta sama wartość występuje więcej niż raz w tablicy. Możesz użyć przeciążenia 'Select', które zapewnia również indeks, aby zrobić to wydajniej i niezawodnie. –
Dzięki, i edytuję kod tak jak używałeś 'Wybierz';). –
- 1. filtrowanie tablicy łańcuchów znaków
- 2. Konwersja Dictionary.keyscollection do tablicy ciągów znaków
- 3. inicjalizacja dwuwymiarowej tablicy łańcuchów znaków
- 4. Jaki jest najbardziej elegancki sposób załadowania tablicy łańcuchów do listy <int>?
- 5. Elegancki sposób zwracania dłuższego z dwóch ciągów znaków
- 6. Podział ciąg do tablicy ciągów pojedynczych znaków
- 7. Poprawianie wydajności rozmytego dopasowywania ciągów znaków do słownika
- 8. bajtów (1024) na konwersję ciągów znaków (1 KB)?
- 9. Konwertowanie tablicy macierzy na tablicę ciągów znaków
- 10. Pamięciowy sposób przechowywania ciągów znaków
- 11. Kopiowanie zawartości ciągów do tablicy znaków
- 12. Przesyłanie elementu DictionaryCollection do tablicy ciągów znaków
- 13. Tablica ciągów ciągów znaków
- 14. Inteligentny sposób na znalezienie kodowania ciągów znaków?
- 15. Najbardziej elegancki sposób na sprawdzenie obsługi sessionStorage?
- 16. Najbardziej elegancki sposób na usunięcie elementu ciągowego
- 17. Jaki jest najbardziej odpowiedni sposób na konwersję nibbles na u64?
- 18. rails jbuilder - tylko tablica łańcuchów znaków
- 19. skuteczny sposób wyszukiwania ciągu w liście ciągów znaków?
- 20. Najszybszy sposób znalezienia ciągu znaków w tablicy ciągów
- 21. Losowy ciąg znaków z listy ciągów znaków
- 22. Nie można przekazać tablicy ciągów znaków
- 23. Konwertowanie tablic łańcuchów C na ciąg znaków Swift
- 24. Konwersja tablicy znaków do ArrayList znaków
- 25. Konwertuj zestaw wyników z tablicy SQL na tablicę ciągów znaków
- 26. Jak sformatować listę ciągów znaków
- 27. C# tłumaczenie ciągów znaków
- 28. ForEach to Trim wartości ciągów w tablicy ciągów znaków
- 29. Przeciążanie literowe ciągów znaków
- 30. Algorytm porównać jedną tablicę łańcuchów do wielu tablicy ciągów
zależy od strukturę, którą chcesz w sumie. W końcu otrzymasz pętlę, bez względu na to, jak na nią patrzysz. –
Zawsze będzie gdzieś pętla, ale LINQ pozwala ci ją ukryć - tzn. Nie musisz mieć pętli w * twoim * kodzie. –