2017-03-24 3 views
-5

Iプレイスクラスの次のオブジェクトの配列を持っている:スウィフトオブジェクト配列のプロパティ値が最小のオブジェクトを見つけるにはどうすればよいですか?

class Place: NSObject { 
    var distance:Double = Double() 
    init(_ distance: Double) { 
     self.distance = distance 
    } 
} 


let places = [Place(1.5), Place(8.4), Place(4.5)] 

私は最短距離のある場所を取得する必要があります。 私は同様の質問に対する答えthisあたりとして

let leastDistancePlace = places.min { $0.distance > $1.distance } 

を使用してみましたが、それは次のようなエラーを与えました。

Contextual closure type '(Place) -> _' expects 1 argument, but 2 were used in closure body

PS:@robmayoffの答えを1として

、私が遊び場で、以下を試してみましたが、私はエラーを取得しておいてください。

value of Type [Place] no member min

このスクリーンショットを確認してください。 enter image description here

私の迅速なバージョンがある:アップルスウィフトバージョン2.2(swiftlang-703.0.18.8打ち鳴らす-703.0.31)

+2

あなたはそれがないではない 'map' –

+1

」、' max'か(参照の答えのように) 'min'を使用する必要があります仕事 "は十分な情報ではありません。どのように失敗するのですか?コンパイル時にエラーが出ますか?実行時エラーが出ますか?コンパイルして実行しますが、間違った答えを出しますか?これらの詳細を含めるように質問を編集してください。 –

+1

ちなみに、あなたの試みでは、あなたは 'places.map'と言っていますが、リンクした答えは' places.max'です。おそらく、あなたは 'places.min'と言っていたでしょうか? –

答えて

1
let sortedPlaces = places.sorted(by: { $0.distance < $1.distance }) 
let first = sortedPlace.first 

はちょうど私が私だと思うしかし、あなたの質問が悪い言葉で表現されたソート

+2

最小の(または最大の)要素が必要な場合は、配列のソートよりも最大/最小のほうが効率的です。 –

+1

または '分(by:)'です。 O(nlog(n))ではなくO(n)である。 – Hamish

+1

ああ、私の悪い、忘れた '分' =) – Daivest

1

を使用あなたが尋ねようとしていることを知っている。マッピング機能は、一般的にtranformationsのために使用されます。

let distances = places.map({ (place: Place) -> Int in 
    place.distance 
}) 

速記

let distances = places.map({ $0.distance }) 

あなたは、あなたが望む値を抽出するために、整数のこのアレイ上の最大値や最小を使用することができるため。

2
let leastDistancePlace = places.min { $0.distance < $1.distance } 

または

let leastDistancePlace = places.min(by: { $0.distance < $1.distance }) 

例:

:; xcrun swift 
"crashlog" and "save_crashlog" command installed, use the "--help" option for detailed help 
Welcome to Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1). Type :help for assistance. 
    1>  class Place { 
    2.   var distance:Double = Double() 
    3.   init(_ distance: Double) { 
    4.    self.distance = distance 
    5.   } 
    6.  } 
    7. 
    8. 
    9.  let places = [Place(1.5), Place(8.4), Place(4.5)] 
10.  let leastDistancePlace = places.min { $0.distance < $1.distance } 
places: [Place] = 3 values { 
    [0] = { 
    distance = 1.5 
    } 
    [1] = { 
    distance = 8.4000000000000004 
    } 
    [2] = { 
    distance = 4.5 
    } 
} 
leastDistancePlace: Place? = (distance = 1.5) { 
    distance = 1.5 
} 
11> 
+0

更新された質問を確認してください。それはかなりうんざりです。あなたのソリューションはうまくいくはずだと思いますが、そうではありません。 –

+3

@ toing_toingでは、Swift 2.2で 'min'の代わりに' minElement'を使います。 Swift 3と最新のXcodeに更新する必要があります。 – vacawama

関連する問題