2012-07-26 6 views
9

Tôi đang cố gắng để tìm một cách để khởi tạo một inline điển trong ActionScript 3, như:Initialize điển inline trong AS3

private var sampleDic:Dictionary = new Dictionary (
    { "zero", "Hello" }, 
    { "one", "World" } 
); 

Tôi đã thử nhiều cách khác nhau, nhưng không ai làm việc. Bất cứ ai biết nếu nó có thể, và làm thế nào?

Cảm ơn

Trả lời

8

Không, bạn không thể làm điều đó. Bạn phải xây dựng một từ điển và sau đó thêm các giá trị trong một vòng lặp hoặc riêng lẻ.

+0

Sigh, tôi đã sợ điều đó, cảm ơn – Daniele

0

Nếu không có lý do cụ thể để sử dụng từ điển, bạn có thể làm điều đó với một đối tượng.

private var sample:Object = { 
    "zero": "Hello", 
    "one": "World" 
}; 
+1

Cú pháp không chính xác. Tôi đã sửa chữa nó nhưng nó vẫn chưa xuất hiện. Dù sao, điều này sẽ làm việc tốt khi các phím là dây, nhưng không phải cho bất kỳ loại nào khác. Đưa ra ví dụ trong câu hỏi, có lẽ chuỗi là đủ. –

+0

Cảm ơn nhưng không. Tôi đã sử dụng một ví dụ đơn giản, nhưng trong thực tế tôi cần các phím không phải là dây – Daniele

4

nếu bạn thực sự muốn một cái gì đó như thế, bạn có thể sử dụng một nhà máy từ điển:

public class DictFactory 
    { 
     public var dict:Dictionary; 
     public function create(obj:Object):Dictionary 
     { 
      dict = new Dictionary(); 

      for (var key:String in obj) { 
       dict[key] = obj[key]; 
      } 

      return dict; 
     }   
    } 

Cách sử dụng:

private var sampleDic:Dictionary = new DictFactory().create({ "zero":"Hello", "one": "World" }); 

Các DictFactory.create hy vọng một đối tượng với giá trị khóa, mà ý chí được áp dụng cho từ điển được trả về, nếu bạn vượt qua bất kỳ đối tượng nào khác (trong AS3, bất kỳ lớp nào là đối tượng), kết quả có thể không thể truy cập được. :)

+0

Không nghĩ về điều đó, cảm ơn rất nhiều. Tôi thực sự cần các đối tượng như chìa khóa, nhưng tôi có thể quản lý một cái gì đó như thế mà sẽ cho phép họ. – Daniele

+0

Trong ví dụ của tôi, bạn có thể sử dụng bất kỳ đối tượng nào làm khóa hoặc giá trị –

+0

Ow, bạn nói đúng. Xin lỗi tôi đã dành những tháng cuối cùng bằng cách sử dụng C# và bây giờ tâm trí của tôi là tạo ra những giới hạn không tồn tại mới cho ActionScript. Cảm ơn một lần nữa. – Daniele

2

Bạn có thể mở rộng lớp từ điển và ghi đè hàm tạo mặc định bằng một hàm chấp nhận khóa-giá trị khóa ban đầu.

EDIT:

Bạn cũng có thể sử dụng JS bẩn này như giải pháp :)

import flash.utils.Dictionary; 

var dict : Dictionary = function (d : Dictionary, p : Object) : Dictionary { for (var i : String in p) { d[i] = p[i] }; return d; }(new Dictionary(), { 
    "zero": "Hello", 
    "one": "World" 
}) 

trace(dict["zero"]); 
+0

Đẹp, đó là suy nghĩ bên ngoài hộp. Liệu nó làm chậm công cụ xuống hoặc bất cứ điều gì mặc dù, hoặc là nó về cơ bản chỉ là hiệu quả? – Panzercrisis

+0

Bạn sẽ không cảm thấy tác động hiệu suất nếu không thực hiện trong rất ofter (vài nghìn lần cho mỗi khung :)). Vấn đề với cách tiếp cận này là bạn chỉ có thể sử dụng Strings cho các khóa. Điều đó có nghĩa là bạn không có thêm chức năng nào ngoài Object. Vì vậy, một điều tốt hơn là tạo một số trình bao bọc hoặc lớp nhà máy xung quanh từ điển. –

6

Nếu đó là tĩnh bạn có thể làm điều này với một khối

private static var myDict:Dictionary = new Dictionary(); 
{ 
    myDict["zero"] = "Hello"; 
    myDict["one"] = "World"; 
} 
+1

Đây có phải là loại chủ đề phổ biến trong số các ngôn ngữ hướng đối tượng không? Tôi chưa bao giờ thấy bất cứ điều gì như thế này, ngoại trừ dòng đầu tiên. – Panzercrisis