2009-12-21 38 views
6

Tôi muốn tạo hai mảng thứ nguyên thuộc loại khác nhau như tôi có thể thêm vào mảng đó hai giá trị một trong số đó là tên kiểm soát và thứ hai là giá trị boolean.Xác định mảng động hai chiều với các kiểu khác nhau

+0

Tôi không chắc là tôi hiểu câu hỏi của bạn, nhưng sẽ không phải là một công việc điển cho những gì bạn đang cố gắng làm ? Bạn đang cố gắng lưu trữ các cặp khóa/giá trị? –

+0

yes .............. – Harikrishna

Trả lời

9

Bạn không thể làm điều đó. Thay vào đó, bạn nên tạo một lớp có chứa hai thuộc tính này, sau đó bạn có thể tạo một mảng của kiểu đó:

public class MyClass 
{ 
    public string ControlName {get;set;} 
    public bool MyBooleanValue {get;set;} 
} 

public MyClass[] myValues=new MyClass[numberOfItems]; 

Hoặc, như Anders nói, sử dụng một cuốn từ điển nếu một trong những thuộc tính có nghĩa là để được sử dụng để thực hiện tra cứu.

1

Nếu bạn muốn tra cứu/đặt tên boolean bằng tên điều khiển, bạn có thể sử dụng Dictionary<string, bool>.

4

Bạn không thể làm điều đó với một mảng.

Có lẽ bạn nên sử dụng Dictionary?

Từ điển chung chung của Dictionary<string,bool> dường như là loại điều phù hợp với mô tả của bạn.

0

Sử dụng từ điển < chuỗi, bool >. Nếu, vì lý do nào đó, bạn thực sự cần một mảng, hãy thử đối tượng [,] và truyền giá trị của nó tới các loại bạn muốn.

4

Từ điển sẽ hoạt động cho những gì bạn đang cố gắng làm sau đó.

Dictionary<string, bool> controllerDictionary = new Dictionary<string, bool>(); 

Để đặt một giá trị

if (controllerDictionary.ContainsKey(controllerName)) 
    controllerDictionary[controllerName] = newValue; 
else 
    controllerDictionary.Add(controllerName, newValue); 

Để có được một giá trị

if (controllerDictionary.ContainsKey(controllerName)) 
    return controllerDictionary[controllerName]; 
else 
    //return default or throw exception 
+0

Bạn chỉ có thể sử dụng 'controllerDictionary [controllerName] = newValue;', 'ContainsKey' và' Add' không được yêu cầu –

+0

Ye, đó là sự thật, đó là chỉ cần thiết cho việc nhận được –

1

Một cách khác để làm điều đó là để tạo ra một loạt các loại đối tượng, và sau đó thêm video này vào một ArrayList . Dưới đây là một số mã mẫu:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Collections; 
    using System.Collections.Generic; 

    namespace Collections 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       ArrayList ar = new ArrayList(); 
       object[] o = new object[3]; 
       // Add 10 items to arraylist 
       for (int i = 0; i < 10; i++) 
       { 
        // Create some sample data to add to array of objects of different types. 
        Random r = new Random(); 
        o[0] = r.Next(1, 100); 
        o[1] = "a" + r.Next(1,100).ToString(); 
        o[2] = r.Next(1,100); 
        ar.Add(o); 
       } 
      } 
     } 
    } 
1

Tùy thuộc vào cách bạn muốn sử dụng mảng của mình. Bạn có muốn tìm kiếm giá trị bằng một khóa hoặc bằng chỉ mục của nó không? Konamiman đề xuất một lớp học. Nhưng một lớp học với hai loại là không có gì hơn một Dictionary<type of key, type of value>. Bạn có thể sử dụng từ điển nếu muốn lấy giá trị bằng một khóa. Giống như vậy:

Dictionary<string, int> MyDict = new Dictionary<string, int>(); 
MyDict.Add("Brutus", 16); 
MyDict.Add("Angelina", 22); 
int AgeOfAngelina = MyDict["Angelina"]; 

Bây giờ bất lợi của từ điển là bạn không thể lặp lại nó. Thứ tự chưa được xác định. Bạn không thể sử dụng MyDict[0].Value để lấy tuổi Brutus (là 16).

Bạn có thể sử dụng một

List<KeyValuePair<string, int>> MyList = new List<KeyValuePair<string, int>>(); 

để lặp qua một mảng 2D của hai loại khác nhau như một List hỗ trợ lặp. Nhưng sau đó một lần nữa, bạn không thể có được tuổi của Angelina bởi MyList["Angelina"].Value nhưng bạn sẽ phải sử dụng MyList[0].Value.

Nhưng bạn cũng có thể sử dụng dữ liệu. Nhưng nó đòi hỏi nhiều công việc hơn để khởi tạo bảng với các cột của nó.

+0

Tất nhiên bạn có thể mở rộng với LINQ để sử dụng truy vấn trên dữ liệu của bạn. –

+0

Vì khi nào bạn không thể lặp lại từ điển? – claudekennilol

0

"Một mảng đa chiều là một mảng: tất cả elementsin tất cả các kích thước có cùng loại"

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