2008-11-12 36 views
10

Có cách nào đơn giản để lấy độ dài của mảng kết hợp (được triển khai dưới dạng Object) trong ActionScript 3.0 không?Làm cách nào để tìm độ dài của mảng kết hợp trong ActionScript 3.0?

Tôi hiểu rằng có hai cách chính của việc tạo ra các mảng kết hợp trong AS3:

  1. Sử dụng một đối tượng Dictionary; đặc biệt hữu ích khi khóa không cần phải là một string
  2. Sử dụng một Object và chỉ cần tạo thuộc tính cho từng phần tử mong muốn. Tên thuộc tính là khóa và giá trị là, tốt, giá trị.

Ứng dụng của tôi sử dụng phương pháp # 2 (sử dụng lớp Object để đại diện cho mảng kết hợp).

Tôi hy vọng có cái gì đó bản địa hơn vòng lặp for của tôi, tính theo cách thủ công tất cả các phần tử.

Trả lời

9

Bạn phải đếm chúng trong vòng lặp for như bạn thực hiện. Tất nhiên, bạn có thể làm cho một lớp học và gắn bó cho vòng lặp trong lớp đó.

Đối với một số thao tác tuyệt vời của Bộ sưu tập trong AS3, hãy kiểm tra these guys.

Chỉnh sửa 2013 Không có gì ngạc nhiên khi các liên kết bị hỏng sau thời gian. Hãy thử cái mới này: http://www.grindheadgames.com/get-the-length-of-an-object.

+0

Tại sao downvote 4 năm sau? –

+0

Tôi đã không downvote, nhưng liên kết bị hỏng. Đối với người dùng trong tương lai, vui lòng xem http://www.grindheadgames.com/get-the-length-of-an-object –

3

Tôi nghĩ bạn bị kẹt với việc đếm chúng "theo cách thủ công".

Tùy chọn sẽ bao gồm toàn bộ nội dung trong một lớp và giữ một biến riêng biệt mà bạn cập nhật khi bạn thêm/xóa.

4

Thực hiện một vài thử nghiệm về điều này đã thực sự làm tôi ngạc nhiên. Dưới đây là sử dụng bình thường của một mảng:

var things:Array = []; 
things.push("hi!"); 
trace(things.length); 
// traces 1 
trace(things); 
// traces hi! 

Dưới đây là nếu chúng ta thiết lập một giá trị cho một chuỗi:

var things:Array = []; 
things["thing"] = "hi!"; 
trace(things.length); 
// traces 0 
trace(things); 
// traces an empty string 
trace(things["thing"]); 
// traces hi! 

Về cơ bản nếu bạn thêm những thứ sử dụng chuỗi bạn đang thiết lập các thuộc hơn là thực sự thêm vào mảng . Làm cho tôi tự hỏi tại sao Array lại năng động theo cách này.

Vì vậy, ... hãy đếm các mục có dấu ... cho vòng lặp!

+0

Điều đó thật kỳ quặc! Bạn có nghĩ rằng các Array đang được tái phát lại như một đối tượng trong nội bộ? – defmeta

+0

Trong khi mọi thứ mở rộng đối tượng (động), một số lớp là động và một số là tĩnh. Nhưng tại sao mảng động? – Iain

+0

Trong khi có thể thực hiện được, đây là apon cau mày. Từ API: "Không sử dụng lớp Array để tạo mảng kết hợp ... Để tạo mảng liên kết, hãy sử dụng lớp Đối tượng." – Aupajo

3
var count:int; 
var key:String; 

for (key in myObject) 
{ 
    count++; 
} 

trace ("myObject has this many keys in it: " + count); 

hoặc, cách khác, những for-each cú pháp (tôi đã không kiểm tra để xem đó là nhanh hơn)

for each (var o:* in myObject) 
{ 
    count++; 
} 
+0

Tôi đặt cược đầu tiên là nhanh hơn, nhưng sự khác biệt sẽ là rất nhỏ. –

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