2010-04-05 45 views
43

Mảng lởm chởm (trong C#) là gì? Bất kỳ ví dụ nào và khi nào nên sử dụng nó ...Mảng lởm chởm là gì?

+5

Mảng có răng cưa tồn tại ở bất kỳ ngôn ngữ nào sử dụng mảng –

+2

Cũng lưu ý rằng những thứ khác có thể bị lởm chởm như đường dẫn XML (một số phần tử có thể có con nhỏ và những phần khác), Danh sách (Danh sách), Từ điển và các loại tương tự . Chỉ cần nghĩ rằng tôi sẽ giúp bạn kết hợp các khái niệm khác nhau như là tương tự, hoặc có cấu trúc cơ bản tương tự. – jcolebrand

+0

Đọc rất tốt về các mảng bị lởm chởm bởi Eric Lippert [ở đây] (https://blogs.msdn.microsoft.com/ericlippert/2009/08/17/arrays-of-arrays/). – RBT

Trả lời

53

Mảng răng cưa là mảng mảng.

string[][] arrays = new string[5][]; 

Đó là một tập hợp các lăm mảng chuỗi khác nhau, mỗi có thể là một độ dài khác nhau (họ cũng có thể là độ dài như nhau, nhưng điểm mấu chốt là không có đảm bảo rằng họ).

arrays[0] = new string[5]; 
arrays[1] = new string[100]; 
... 

Điều này khác với một mảng 2D có hình chữ nhật, nghĩa là mỗi hàng có cùng số cột.

string[,] array = new string[3,5]; 
+1

Để chính xác, các mảng bên trong không * nhất thiết * tất cả cùng độ dài; họ rất tốt có thể được. Nó thực sự khá phổ biến để thực hiện mảng đa chiều như mảng răng cưa. – Asik

+0

@Asik, tôi đồng ý. Các từ trong câu đầu tiên về độ dài đã được chỉnh sửa bởi một người dùng khác. Sẽ nâng cấp. –

9

Mảng có răng cưa giống nhau ở bất kỳ ngôn ngữ nào, nhưng đó là nơi bạn có mảng 2 chiều với độ dài mảng khác nhau trong mảng thứ hai và thứ hai.

[0] - 0, 1, 2, 3, 4 
[1] - 1, 2, 3 
[2] - 5, 6, 7, 8, 9, 10 
[3] - 1 
[4] - 
[5] - 23, 4, 7, 8, 9, 12, 15, 14, 17, 18 
5

Bạn có thể tìm thêm thông tin ở đây: http://msdn.microsoft.com/en-us/library/2s05feca.aspx

Ngoài ra:

Một mảng lởm chởm là một mảng mà các phần tử là mảng. Các yếu tố của một mảng răng cưa có thể có kích thước và kích thước khác nhau. Mảng lởm chởm đôi khi được gọi là "mảng mảng". Các ví dụ sau đây cho thấy cách khai báo, khởi tạo và truy cập các mảng bị lởm chởm.

Sau đây là một lời tuyên bố của một mảng đơn chiều có ba yếu tố, mỗi trong số đó là một mảng đơn chiều các số nguyên:

jaggedArray[0] = new int[5]; 
jaggedArray[1] = new int[4]; 
jaggedArray[2] = new int[2]; 

hoặc

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 }; 
jaggedArray[1] = new int[] { 0, 2, 4, 6 }; 
jaggedArray[2] = new int[] { 11, 22 }; 
0

mảng Jagged là một mảng với các mảng khác chứa bên trong.

Mảng răng cưa là mảng trong đó số hàng cố định nhưng số cột không cố định.

Mã cho mảng lởm chởm trong C# để áp dụng hình thức sổ

int[][] a = new int[3][]; 

a[0]=new int[5]; 
a[1]=new int[3]; 
a[2]=new int[1]; 

int i; 

for(i = 0; i < 5; i++) 
{ 
    a[0][i] = i; 
    ListBox1.Items.Add(a[0][i].ToString()); 
} 

for(i = 0; i < 3; i++) 
{ 
    a[0][i] = i; 
    ListBox1.Items.Add(a[0][i].ToString()); 
} 

for(i = 0; i < 1; i++) 
{ 
    a[0][i] = i; 
    ListBox1.Items.Add(a[0][i].ToString()); 
} 

Như bạn có thể thấy trong các chương trình trên không có hàng là cố định đến 3, nhưng số lượng các cột chưa được khắc phục. Vì vậy, chúng tôi đã lấy ba giá trị khác nhau của cột tức là 5, 3 và 1. Từ khóa ListBox1 được sử dụng trong mã này là dành cho hộp danh sách mà chúng tôi sẽ sử dụng trong biểu mẫu cửa sổ để xem kết quả bằng cách nhấp vào nút đó cũng sẽ được sử dụng trong dạng cửa sổ. Tất cả các chương trình được thực hiện ở đây là trên nút.

+1

Bạn không nên hạn chế mã trên chỉ với các biểu mẫu. Bạn có thực sự hiểu bao nhiêu hoạt động chỉ cần dòng này 'ListBox1.Items.Add (...)' để kết thúc? Đó là một chậm lớn rất lớn cho các thuật toán. Tất cả các hoạt động nên có được giữa bộ vi xử lý và bộ nhớ mà không có giao diện người dùng có liên quan. – CodeArtist

4

Mặc dù câu trả lời hay nhất được chọn bởi chủ sở hữu câu hỏi nhưng tôi vẫn muốn trình bày mã sau đây để làm cho mảng răng cưa rõ ràng hơn.

using System; 

class Program 
{ 
static void Main() 
{ 
// Declare local jagged array with 3 rows. 
int[][] jagged = new int[3][]; 

// Create a new array in the jagged array, and assign it. 
jagged[0] = new int[2]; 
jagged[0][0] = 1; 
jagged[0][1] = 2; 

// Set second row, initialized to zero. 
jagged[1] = new int[1]; 

// Set third row, using array initializer. 
jagged[2] = new int[3] { 3, 4, 5 }; 

// Print out all elements in the jagged array. 
for (int i = 0; i < jagged.Length; i++) 
    { 
    int[] innerArray = jagged[i]; 
    for (int a = 0; a < innerArray.Length; a++) 
    { 
    Console.Write(innerArray[a] + " "); 
    } 
    Console.WriteLine(); 
    } 
} 
} 

Sản lượng sẽ

1 2 

0 

3 4 5 

mảng Jagged được sử dụng để lưu trữ dữ liệu trong dãy độ dài khác nhau.

Để biết thêm thông tin, hãy kiểm tra this post at MSDN blog.

2

Mảng lởm chởm là một trong đó bạn khai báo số hàng trong quá trình khai báo nhưng bạn khai báo số cột trong thời gian chạy hoặc cũng do người dùng lựa chọn, đơn giản là khi bạn muốn số cột khác nhau trong mỗi mảng JAGGED phù hợp trong trường hợp đó

int[][] a = new int[6][];//its mean num of row is 6 
     int choice;//thats i left on user choice that how many number of column in each row he wanna to declare 

     for (int row = 0; row < a.Length; row++) 
     { 
      Console.WriteLine("pls enter number of colo in row {0}", row); 
      choice = int.Parse(Console.ReadLine()); 
      a[row] = new int[choice]; 
      for (int col = 0; col < a[row].Length; col++) 
      { 
       a[row][col] = int.Parse(Console.ReadLine()); 
      } 
     } 
0

Mảng có răng cưa là mảng đa chiều với số lượng hàng khác nhau khác nhau.

+1

Câu trả lời Yoru nêu rõ những điều giống như những câu trả lời khác đã nêu kể từ năm 2010 - vì vậy bạn không thêm gì về giá trị. –

Các vấn đề liên quan