2016-05-02 23 views
0

Stringレベルではなく、レベルの値を比較したいと考えています。[[String]]の文字列値を文字列と比較するにはどうすればよいですか?

var connectedNames:[[[String]]] = [[[]]] 

for var row: Int = 0; row < connectedNames[0].count; row++ { 
    if self.connectedNames[0][row] as! String == "asdf" { 

    } 
} 

をしかしStringから[String]から、ここでのキャストは、私は、この値の比較をすることはできません失敗します。ここで私が何を意味するかです。

したがって、主な問題は次のとおりです。[[String]]の文字列値をStringと比較するにはどうしてですか?言い換えれば、私がインデックスconnectedNamesから得た文字列値はconnectedNames[0][0] == "Some String"のようになりますか?

+1

ちょっとした提案:配列を非常に多くのレベルに入れ替えるのではなく、あなたが達成しようとしていることを行うクラスや構造体を定義して、比較を実行するメソッドを完成させることができますその後、それを働かせ、実装の詳細を忘れてしまいます。あなたの将来の自己は、ラインの下であなたに感謝します。 –

+0

@NicolasMiariご意見ありがとうございます。しかし、私は本当にクラスと構造を効果的に使う方法がわからないほどのことです。だから私はあなたの意味をあいまいに理解している。ある日、他の人のコードでそれらを正しく使用する方法を見ていきたいと思います! – aejhyun

答えて

2

[[String]]を文字列と比較できるのは、配列のサブスクリプトメソッドを使用して内部要素にアクセスすることだけです。

func compare() -> Bool { 
    let arr: [[String]] = [["foo"]] 
    let str: String = "foo" 

    guard let innerArr = arr[0] else { 
     return false 
    } 

    guard let element = innerArr[0] else { 
     return false 
    } 

    return element == str 
} 
+1

トリプル '==='は、その値が同じ場合と全く同じオブジェクトではないことを比較することです – boidkan

+0

はい、ありがとうございます。私の部分にTypo :) –

+0

あなたの答えのための@ChristopherHarrisありがとう!私は本当にあなたの助けに感謝します。私は今それを理解しようとしています。しかし、一つのこと、なぜあなたはガードを持っていますか?それは必要ですか?それとも、より安全なコーディングですか? – aejhyun

関連する問題