tablice wielowymiarowe (multidimensional arrays)
operacje na tablicach w powershell są dość dziwnie rozwiązane. jak zwykle przy walce z najprostszymi [wydawałoby się] operacjami jest całkiem sporo zabawy. dla tego ciekawostka: jak dodać element do tablicy wielowymiarowej?
krótki scenariusz: dostaję dwuelementowe tablice wyników. chcę przechowywać je w dwuwymiarowej tablicy. czemu nie hashtable? ponieważ nie ma indexów i nie da się sprawdzić np. “3 elementu tablicy”.
deklaracja tablicy jest trywialna:
- $multiarray=@() – definicja pustej tablicy, uniwersalne
- $multiarray=(“abc”,”def”),(“ghi”,”jkl”),(“mno”,”prst”) – definicja z 3ma elementami
najpierw zajmę się drugim przypadkiem, bo działa prawidłowo i jest poprawną tablicą wielowymiarową:
>echo $multiarray[0]
abc
def
>echo $multiarray[1][1]
jkl
no i supa. teraz spróbujemy dodać kolejną tablicę … i tu zaczyna się robić dziwnie:
>$multiarray+=(“uwx”,”yz”)
>echo $multiarray[3]
uwx
>echo $multiarray[3][1]
w
he? o co c’mon? o fakt, iż tablice można mieszać – dodawać elementy różnych typów. wykonując dodanie +=(“uwx”,”yz”) de facto dodajemy dwa kolejne elementy do tablicy, będące jednowymiarowymi tablicami [po prostu stringami]. jak zatem dodać kolejną tablicę? spróbujmy tak:
>$multiarray+=@(“uwx”,”yz”)
eeee. WRONG! nadal dokładnie tak samo. aby dodać tablicę trzeba użyć takiej zupełnie intuicyjnej składni z przecinkiem (; pokażę od początq:
>$multiarray=(“abc”,”def”),(“ghi”,”jkl”),(“mno”,”prst”)
>$multiarray+=,(“uwx”,”yz”)
>$multiarray[3]
uwx
yz
>$multiarray[3][1]
yz
w końcu dobrze! w takim razie całe rozwiązanie będzie wyglądało tak:
>$multiarray=@()
>TUTAJ JAKIŚ LOOP
$multiarray+=,($cos1,$cos2)
pozostaje jeszcze kilka innych ciekawostek o tablicach wielowymiarowych, o których trzeba wiedzieć:
podana przeze mnie definicja to ‘tablica tablic’ a nie stricte ‘tablica wielowymiarowa’. poprawny zapis tablicy wielowymiarowej to:
$multiarray=New-Object ‘object[,]’ 10,2 – definicja tablicy wielowymiarowej 1ox2
jednak operacje na takiej tablicy są trudniejsze – np. dodanie dwóch elementów wymagało by wykonania dwóch operacji – dla [x,0] i [x,1]. przy ‘tablicy tablic’ wystarczy +=,($x,$y) a więc jest łatwiej. dostanie się do komórek jest wtedy $multiarray[x,y] a nie jak przy ‘tablicy tablic’ $multiarray[x][y].
pozostaje kwestia wyświetlenia na ekran i tutaj kolejna niemiła niespodzianka: wspaniała funkcja Format-Table nie potrafi poradzić sobie z takimi tablicami. czy będzie to prawdziwa wielowymiarowa czy tablica tablic – będą one wyświetlane jako kolejne elementy ): niestety pozostają stare niedobre sposoby iteracji i formatowanie pojedynczych rzędów ): i znów dla ‘tablicy tablic’ operacja enumeracji jest prostsza:
>foreach($ma in $multiarray) { echo "$($ma[0]) -> $($ma[1])" }
abc -> def
ghi -> jkl
mno -> prst
uwx -> yz
eN.
testy systemów na smartphony–cz.VII–Podsumowanie
cykl dobiegł końca, większość moich testów również. na pewno chciałbym się dowiedzieć więcej o możliwościach/zarządzaniu MDM – jeśli zrobię kiedyś porządne testy nie omieszkam podzielić się wrażeniami. póki co pozostało krótko podsumować wnioski.
to było dla mnie bardzo ciekawe doświadczenie. kiedy zaczynałem test, w zasadzie miałem gotową odpowiedź: standardem będzie Android! BB za drogie a ajsron to qpa. wraz z kolejnymi testami i obiektywnym spojrzeniem na możliwości i zarządzanie, moja pozycja została mocno zrewidowana. Android – jak najbardziej, ale raczej prywatnie. uważam, że przez najbliższy rok to pakowanie się w duże ryzyko. ten świerzak musi jeszcze trochę dojrzeć. iOS z kolei zaskoczył mnie wsparciem ze strony samego Apple oraz bardzo dobrym wsparciem przez MDM. o BB dowiadywałem się od zera bo nie miałem styczności [pomimo, że wdrażałem samego BESa dwa razy w integracji z ex2k3 q: ] i również musiałem się pokłonić przed tym rozwiązaniem – choć, jak wspominał Gibon – BB przechodzi kryzys a więc staje się również ryzykownym produktem.
dla mnie projekt jest sukcesem ze względu na wyrobienie sobie świadomości ‘firmowego podejścia do tematu’ – czyli z innej perspektywy i bardziej w szczegółach.
Poniżej prezentuję tabelę ocen poszczególnych systemów. Wartości są subiektywną próbą oceny faktów, opisanych w poprzednich częściach.
System
Bezpieczeństwo
Zarządzalność
Przyjazność
Aplikacje
Sprzęt
WP7
1
2
8
5
2
Android
5
6-9
8-1o
1o*
1o
iOS
6
8-1o
1o
1o
1
BB
1o
1o
7-8
8
6
Symbian
8
8-1o
5
9
1o
bardzo istotnym aspektem ‘standaryzacji’ jest również koszt – wdrożenia i utrzymania. niestety moje testy tego objęły, zająłem się bardziej funkcjonalną częścią. trochę żałuję, ale cóż – ograniczenia czasowe i cierpliwość mnie ograniczyły ):
mam nadzieję, że przedstawione analizy pomogą komuś w razie dokonywania wyboru. zachęcam do zostawienia komentarzy i podzielenia się swoimi spostrzeżeniami.
eN.