2009-03-06 28 views
13

Tôi muốn biết thứ tự lặp cho các loại mảng, từ điển và đối tượng trong AS3, cho cả vòng lặp for-each và for-in. Ngoài ra những yếu tố nào có thể thay đổi thứ tự lặp của các kết hợp kiểu vòng lặp này?For-Each Loop AS3: Hướng được đảm bảo?

Ví dụ: tôi giả định rằng việc sử dụng một for-each trên một loại mảng luôn chuyển từ phần tử đầu tiên sang phần tử cuối cùng. Đối với mỗi loại không thể được sử dụng trên một từ điển, vậy thứ tự được xác định bằng cách sử dụng vòng lặp for-in như thế nào?

+0

+1. Câu hỏi rất hay, quan sát của bạn là gì? Tôi tò mò! – dirkgently

+1

Đó là một cơ bản tốt eh :) Tôi đã có một lỗi trong dự án một thời gian trở lại, mà tôi truy nguồn từ một mảng hoặc là đảo ngược hoặc cho mỗi người đã di chuyển qua nó trở lại phía trước. Tôi thay thế cho mỗi với một cho-index ++ lopp và lỗi biến mất. Tôi chưa bao giờ thực sự chắc chắn 100% nguyên nhân là gì. –

Trả lời

5

Bạn có nghĩa là loại vòng lặp for-each for (x in y) không? Đặc tả AS3 nói rằng đối với các vòng lặp "có cùng cú pháp và ngữ nghĩa như được định nghĩa trong ECMA-262 phiên bản 3 và E4X".

ECMA-262, mục 12.6.4 tuyên bố rằng "thứ tự liệt kê được xác định bởi đối tượng" - nói cách khác, nó sẽ phụ thuộc vào việc bạn đang lặp qua danh sách, từ điển, mảng ...

tôi sẽ hy vọng rằng các tài liệu đối với hầu hết các bộ sưu tập sẽ nói rõ thứ tự liệt kê (hoặc thứ tự không được định nghĩa) nhưng tôi đã không kiểm tra ...

EDIT: Thật không may là tình trạng thông số kỹ thuật rằng "cơ chế liệt kê các đặc tính [...] phụ thuộc vào việc thực thi." Tôi không thể thấy bất kỳ thứ gì trong tài liệu Array để chỉ định thứ tự. Đó là một chút không đạt yêu cầu, phải trung thực: (

+0

Cảm ơn Jon, tôi vừa nêu câu hỏi cụ thể hơn dựa trên câu trả lời của bạn –

+1

Tôi đã hoàn toàn lặp lại câu hỏi, tôi nghĩ điều này khá rõ ràng :) –

+1

Cảm ơn bạn đã chỉnh sửa Jon, Chắc chắn không thỏa đáng rằng nó không được chỉ rõ trong tài liệu. Tôi sẽ xem xét tài liệu cụ thể AS3 về câu hỏi này –

2

Thứ tự đánh giá thay đổi trong AS3.0 Trước đó, trong AS 1.0 và 2.0, thứ tự đánh giá dựa trên thứ tự các đối tượng được thêm vào. 3.0, tất cả các vòng lặp duy trì trật tự mảng Hãy thử đoạn:.

var a:Array = new Array(); 
a[ 1 ] = 'first'; 
a[ 0 ] = 'second'; 

for (var key:String in a) 
    trace(key + ': ' + a[ key ]); 

Thử trên với AS3.0 và AS1.0/2.0

+0

Câu hỏi đặt ra là liệu mã này có tạo ra cùng một đầu ra cho các thời gian chạy Flash khác nhau hay không. – Pup

8

Như đã nêu trong khái quát Actionscript 3.0 bởi Colin Moock, thứ tự của một cho mỗi vòng lặp không được đảm bảo trừ khi liệt kê đối tượng XML hoặc XMLList;

Click here for Colin Moock's words from his book.

Có cách giải quyết khác như được thảo luận here, nhưng thành thật nếu bạn cần đảm bảo đơn đặt hàng, sau đó chỉ sử dụng vòng lặp thông thường cho vòng lặp và lặp lại (dài, numChildren, v.v.).

+0

có lý do cụ thể nào mà bạn biết cho đơn hàng không được bảo đảm không? Tôi có thể hiểu vì một Array có thể có chỉ số không phải là số. Điều này khiến tôi ngạc nhiên .. chắc chắn là một Vector. <> Có một trật tự được bảo đảm vì nó được lưu trữ tuần tự trong bộ nhớ? –

+0

Như tôi đã nói ở trên, Colin Moock đã trình bày chi tiết điều này, vui lòng theo liên kết ở trên được lấy trực tiếp từ cuốn sách của ông. -Cheers –

+2

Thành thật mà nói, tôi khá không thoải mái với tuyên bố đó nếu không có lý do gì được đưa ra. Không phải là tôi tin rằng nó là sai, nhưng rằng không có logic hoặc lý luận đằng sau nó (rất có thể là do chỉnh sửa).Tôi quan tâm đến cơ chế bên trong lý do tại sao một cho mỗi vòng lặp không thể đảm bảo trật tự trên một cuốn sách của Arin –

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