jak w PS utworzyć tablicę tablic (np. znaków)? czyli tak, aby każdy element tablicy był kolejną tablicą znaków.
zadanie wydawałoby się trywialne… ale jest drobny myk, na którym można stracić czas. problem polega na tym, że jeśli element tablic są tego samego typu, to dodając je do tablicy, zamiast tworzyć oddzielne rekordy, są sklejane.
przykład:
C:\...ive\_scriptz :))o- $str2=1,4,6 C:\...ive\_scriptz :))o- $str1=1,4,6 C:\...ive\_scriptz :))o- $str=@() C:\...ive\_scriptz :))o- $str+=$str1 C:\...ive\_scriptz :))o- $str+=$str2 C:\...ive\_scriptz :))o- $str 1 4 6 1 4 6 C:\...ive\_scriptz :))o- $str.length 6
czyli źle – zamiast zrobić dwuelementową tablicę, gdzie każdym elementem jest inna, 3-elementowa tablica, zostały one sklejone w 6-elementową tablicę znaków. tak samo się zachowa czy są cyfry czy znaki alfabetu. zachowanie dobre, bo zazwyczaj takiej właśnie operacji się oczeqje. ale jak zmusić aby była to tablica tablic?
trik polega na zmuszeniu PS do zrozumienia, że dodawany element ma być jako całość oddzielnym rekordem tablicy. robi się przy pomocy przecinka:
C:\...ive\_scriptz :))o- $str1=1,4,6 C:\...ive\_scriptz :))o- $str2=1,4,6 C:\...ive\_scriptz :))o- $str=@() C:\...ive\_scriptz :))o- $str+=,$str1 C:\...ive\_scriptz :))o- $str+=,$str2 C:\...ive\_scriptz :))o- $str 1 4 6 1 4 6 C:\...ive\_scriptz :))o- $str.Length 2 C:\...ive\_scriptz :))o- $str|gm TypeName: System.Object[]
choć wynik wygląda pozornie tak samo, kiedy sprawdzi się ilość elementów tablicy – są dwa. get-member pokazuje, że każdy z nich jest tablicą.
eN.