2013-06-10 7 views
9

Z dokumentacji MSDN sprawie sposobu Array.Copy:Array.Copy zawsze row-major?

Podczas kopiowania między wielowymiarowych tablic, matryca zachowuje się jak długi tablicy jednowymiarowej, gdzie rzędy (lub kolumny) są koncepcyjnie określoną końcami. Na przykład, jeśli tablica ma trzy wiersze (lub kolumny) z czterema elementami, kopiowanie sześciu elementów z początku tablicy spowoduje skopiowanie wszystkich czterech elementów pierwszego wiersza (lub kolumny) i pierwszych dwóch elementów drugiego wiersza (lub kolumna).

Zawsze zakłada się, że w C#, macierze dwuwymiarowe są określone w row-major order (i podobnie dla wyższych wymiarów), więc jestem mylić o znaczeniu nawiasach „lub kolumnach” w powyższym dokumentacja. Czy to oznacza, że ​​mogą występować okoliczności, w których system .NET Framework używa kolejności kolumn-wielkich?

+2

To dość mylące. Być może próbują tylko objąć przypadek, w którym (#rows == 1). Jestem prawie pewny, że zawsze jest kopiowany w kolejności rzędowej. W przeciwnym razie powstaje chaos! –

+1

Tak też początkowo myślałem, ale nie obejmuje to "trzech wierszy (lub kolumn) z czterema elementami". Moje obecne przypuszczenie jest takie, że zostało sformułowane w ten sposób dla osób, które zmieniają definicje wierszy i kolumn. – Douglas

+4

Myślę, że to stara się być agnostyka wiersz/kolumna-major; nie obchodzi, czy wyobrażasz sobie swój pierwszy indeks jako wiersz lub kolumnę. – Rawling

Odpowiedz

10

Podejrzewam jest jedynie stara się przekazać, że tablica nie jest prostokątem - jest to pojedynczy przestrzeń liniowa. Każda koncepcja "wiersza" lub "kolumny" jest w rzeczywistości wynalazkiem użytkownika. Nie ma wierszy ani kolumn; jakakolwiek konwencja zgodna z arr[x,y] jest "wiersz x, kolumna y" lub "kolumna x, wiersz y" jest czysto: konwencją; część naszej wyobraźni w konceptualizowaniu czegoś. Jedyna rzeczywista kolejność to , której indeks jest wyświetlany jako pierwszy. Pierwszy? czy ostatni?

Niezależnie od tego, czy nazywasz to "rzędami", czy "kolumnami", zależy to od Ciebie, a istnieją przykłady obu w użyciu w środowisku naturalnym.

+0

Zgadzam się, chociaż brak dalszych wyjaśnień sprawia, że ​​artykuł jest bardziej zagmatwany, niż gdyby był zgodny z główną konwencją '[wiersz, kolumna]'. – Douglas

+1

Czy można wskazać dowolny zasób online lub publikację, w której pierwszy indeks jest nazywany kolumną? Nie przypominam sobie spotkania z tą konwencją. – Douglas

+0

@Douglas: Istnieje FORTRAN dla .NET. W języku FORTRAN tablice mają kolumnę główną. Tak więc każda dokumentacja dla tego języka wywoła pierwszy indeks "kolumna". –