2014-06-23 14 views
5

Tôi có hai mảng như [1, 2, 3]["a", "b", "c"] và tôi muốn để lập bản đồ trên các giá trị nén (1, "a"), (2, "b"), và (3, "c") sử dụng Zip2.Làm thế nào để bạn ánh xạ các giá trị của Zip2?

Nếu tôi làm điều này:

let foo = map(Zip2([1, 2, 3], ["a", "b", "c"]).generate()) { $0.0 } 

foo có loại ZipGenerator2<IndexingGenerator<Array<Int>>, IndexingGenerator<Array<String>>>?.

Có cách nào để tạo một mảng không?

+0

Tôi hơi bối rối về câu hỏi. Tôi thấy nó đã được trả lời rồi, nhưng nếu bạn chỉ sau khi một kết quả Array tại sao không chỉ làm điều này: 'let foo = map (Zip2 ([1, 2, 3], [" a "," b "," c "])) {$ 0.0}' Sau đó 'foo' là một mảng. –

+0

Có vẻ hợp lý. Hoặc đó là một cái gì đó tôi đã không cố gắng, hoặc thư viện Swift đã được cải thiện kể từ khi tôi đặt ra câu hỏi này. – alltom

Trả lời

6

Sau đây sẽ giúp bạn có một mảng từ các giá trị trở lại của Zip2:

var myZip = Zip2([1, 2, 3], ["a", "b", "c"]).generate() 
var myZipArray: Array<(Int, String)> = [] 

while let elem = myZip.next() { 
    myZipArray += elem 
} 

println(myZipArray) // [(1, a), (2, b), (3, c)] 

- CẬP NHẬT: Thậm chí tốt hơn! -

let myZip = Zip2([1, 2, 3], ["a", "b", "c"]) 
let myZipArray = Array(myZip) 

println(myZipArray) // [(1, a), (2, b), (3, c)] 

- bây giờ cho vui -

tôi sẽ đoán rằng chúng ta có thể init một mảng mới với bất cứ điều gì mà đáp ứng generate()?

println(Array("abcde")) // [a, b, c, d, e] 
0

Giả sử rằng vals là kết quả của Zip2, mà tôi sẽ giả sử là một mảng gồm hai bộ dữ liệu. Như thế này:

let vals = [(1, "a"), (2, "b"), (3, "c")] 

Với điều đó, chỉ cần gọi phương thức map() trên một mảng.

vals.map { $0.0 } 

Ví dụ:

> vals.map { $0.1 } 
$R16: String[] = size=3 { 
    [0] = "a" 
    [1] = "b" 
    [2] = "c" 
} 
+0

Zip2 là một cấu trúc và không phải là một mảng các bộ dữ liệu. : \ – alltom

+0

Khi tôi sử dụng bản đồ với một phạm vi như 'map (0..5) {$ 0}' thì tôi nhận được một mảng bằng cách gói nó như 'Array (map (0..5) {$ 0})'. Tôi đang tìm kiếm các biến đổi tương tự cho máy phát điện Zip2 (tôi nghĩ). – alltom

+0

Sau đó, không sử dụng Zip2. :-) Nó rõ ràng là một tổ chức từ những ngày Objective-C nơi tuples không tồn tại như là đối tượng hạng nhất. – GoZoner

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