2016-06-18 13 views
2

私はバス路線を扱う私のアプリに苦労しています。私は、すべてのバス停で、そこから出発するバスのすべての将来の出発、出発は出発の方向と時間を含んでいます。私はバスが一定の方向に往復することができるようにしたい、ネストされた辞書を作成してこれまで行ってきましたが、もっとスマートにできるかどうか疑問に思っていましたか?ネストされた辞書よりも適切なソリューションですか?

var dict = ["Busname": ["Direction" : ["time1", "time2", "time3"]]]() 

賢く方法があります:これは私がこれまで

var dict = [String: [String : [String]]]() 

だから、それはようなものになるだろう得たものでしょうか?それとも、これは行く方法ですか?私は与えられたバスの出発時刻のリストを与えたい。

答えて

1

辞書の代わりに構造体を使用できます。

クイックたとえば、のは、バスオブジェクトを作成してみましょう:

struct Bus { 
    var name: String 
    var direction: String 
    var times: [NSDate] 
} 

それは各バスの値を保持している:バスの名前、その方向、およびバス時刻の日付の配列。

もちろん、それは単なる例です。ユースケースに合わせなければなりません。

あなたのバスを作成します。

let bus1 = Bus(name: "Busey MacBusface", direction: "Somewhere", times: [...some dates...]) 
let bus2 = Bus(name: "Gary Bussey", direction: "Nowhere", times: [...some dates...]) 

あなたがコレクションでそれらを持つことができますフィルタリングする

let todayBusses = [bus1, bus2] 

簡単:

let allDirections = todayBusses.map { $0.direction } 
let allTimes = todayBusses.map { $0.times } 
let someBusses = todayBusses.filter { $0.times.contains({ (date) in 
    // compare 'date' with other date(s) 
}) } 
let notNowhere = todayBusses.filter { $0.direction != "Nowhere" } 

等アゲイン

、これをちょうど速いexです十分ですが、私はそれがあなたにアイデアを与えることができると思います。あなたはバスの特定の名前のための時間になるだろうどのように

let times = todayBusses.filter { $0.name == "theBusName" }.map { $0.times } 
+0

「バスの特定の名前のための時間は、」のようなものでしょうか?私はバスを探して、配列内のアイテムをプリントアウトする必要がありますか? – Recusiwe

+0

例を使って自分の答えを更新しました。私の例ではマップとフィルタを使用していますが、これに慣れていない場合は、もちろん通常どおりループを使用することもできます。 – Moritz

+0

現時点では、ストップを持つクラスとデパルタを持つクラスを持っています。このクラスは配列内のストップクラスに含まれています。だから、別のクラス/構造体を作成して、すべての出発点をループして、正しいバスオブジェクトに追加されるようにしてください。物事は、同じバスがJSONで何度も繰り返されることです。なぜなら、それは1日に数回の出発があるからです。だから私はバスのリストをループして、そこにあるかどうかをチェックしなければならないと思います。もしそうでなければ、オブジェクトを作成して追加します。現在のオブジェクトのリスト? – Recusiwe

関連する問題