2016-04-13 8 views
1

habe ich eine Reihe von Tupeln wie folgteine Teilmenge von Tupel Array in schnellen

var customProducts = [(productType: String, info:[String:AnyObject?])] 

Der Parameter „product“ funktioniert wie ein „Produktkategorie“, wie Obst, Getreide, Getränke, usw.

Der Parameter "info" ist ein Wörterbuch der Ernährungsinformationen des Produkts.

Ich möchte eine Teilmenge des Tupel-Arrays erhalten, basierend auf dem Produkttyp, so dass ich nur das "Info" -Wörterbuch für einen bestimmten Produkttyp erhalten konnte. In C# würde ich so etwas wie die folgenden mit Linq versuchen:

var fruits = customProducts.Where(q=>q.productType == "fruit").Select(q => q.info) as List<KeyValuePair<string, object>>; 

Wie kann ich die gleichen Resultate mit dem Swift (2.x) archivieren?

Danke!

Antwort

2

ich denke, die Swift entsprechen würde:

let fruits = customProducts.filter { $0.productType == "fruit" }.map { $0.info } 

Hier fruits ist [[String : AnyObject?]], eine Reihe von Wörterbüchern (ein Array von info, das gleiche wie Ihr List<KeyValuePair<string, object>>, wenn ich mich nicht irre).

+0

Arbeitete genau wie ich brauchte! Vielen Dank! – dijeferson

+0

Gern geschehen. :) – Moritz

0

können Sie die Methode Filter verwenden

let beverageInfo = (customProducts.filter { $0.productType == "Beverage" }).first?.info 

Jetzt beverageInfo ist [String : AnyObject?]?, ein optionales Wörterbuch, um die Informationen für "Beverage" Tupel darstellt.

+0

Funktioniert die "erste" Eigenschaft wie die "First()" Methode in C#? – dijeferson

1

sollten Sie das Array-Filter nach dem, was das Produkt-Typ

ist

Eg

var customProducts = [(productType: String, info:[String:AnyObject?])] 

let fruitProducts = customProducts.filter { product in 
    if product.productType == "fruit" { 
     return true 
    } else { 
     return false 
    } 
}.map { $0.info } 

Dann können Sie fruitProducts verwenden, wie Sie wollen.

+2

Ihre if-Anweisung hat die folgende Logik: Wenn die Bedingung true zurückgibt, geben Sie true zurück. Wenn die Bedingung false zurückgibt, geben Sie false zurück. Du kannst einfach 'product.productType == "fruit" '' zurückgeben;) – Hamish

+0

Ja, du hast Recht, ich bin noch relativ neu im Codieren (4/5 Monate), also ist die Art und Weise, wie ich richtig schreibe, mehr Sinn für mich . Ich werde versuchen, in Zukunft prägnanter zu sein. Danke für den Tipp! –