2017-08-14 8 views
0

私はCLLocationsの配列の配列を持っていますが、最近タイムスタンプに従って起こったCLLocationオブジェクトを持つ配列を探しています。インデックスまたは実際のリストのいずれかで十分です。配列の配列内で最大のオブジェクトを持つ配列を取得します。

これまでのところ、私は出ている:

let latestList = listOfListOfLocations.index{$0.max{a,b in a.timestamp < b.timestamp} < $1.max{c,d in c.timestamp < d.timestamp}} 

が、私は運を取得していないことだし、それは、スウィフトに比較的新しいものの周りに私の頭を取得することはできません。どんな助けでも大歓迎です。

答えて

0

まず、各アレイの「submaxes」を取得して、グローバルな最大値を得るために、それらの最大を取ります。

let subArrayContainingMostRecentObject = listOfListOfLocations 
    .flatMap{ subarray in 
     return subarray 
      .max{ $0.timestamp < $1.timestamp } 
      .map{ submax in (subarray: subarray, submax: submax) } 
    } 
    .max{ $0.submax.timestamp < $1.submax.timestamp }?.subarray 
+0

@MartinRありがとう、すぐに更新します – Alexander

+0

これを変更してインデックスを取得するにはどうすればよいでしょうか? – user3599895

+0

@ user3599895どのインデックスですか? – Alexander

0

これが最も十分な実装であるかどうかはわかりませんが、機能するかどうかは不明です。

let mostRecent = listOfListOfLocations.max{$0.max{$0.timestamp < $1.timestamp}! < $1.max{$0.timestamp < $1.timestamp}!}?.max()

+0

あなたは自分のmaxesを取得するために、各サブアレイを通して1つのパスをしている方がいいでしょうし、その後1は、グローバル最大を取得するためにsubmaxesの配列を通過します。それ以外の場合は、2つの配列が比較されるたびに、各サブアレイのサブマックスを再計算する必要があります。 – Alexander

関連する問題