2016-02-05 21 views
7

Vì vậy, nói rằng tôi có một cuốn từ điển đó trông như thế này:Làm cách nào để tìm giá trị tối đa trong từ điển Swift?

var data : [Float:Float] = [0:0,1:1,2:1.414,3:2.732,4:2,5:5.236,6:3.469,7:2.693,8:5.828,9:3.201] 

Làm thế nào tôi có thể lập trình tìm giá trị cao nhất trong từ điển? Có lệnh "data.max" hay gì đó không?

+2

'để maxvalue = data.sort {$ 0.1 <$ 1.1} .last // (.0 8, .1 5,828) ' –

+2

@LeoDabus công trình câu trả lời của bạn, nhưng' sort() 'nó không phải là một cách hiệu quả để giải quyết vấn đề này nó cần' O (nlogn) 'và' maxElement 'mặc định lấy' O (n) '. –

+0

@VictorSigler Câu trả lời của bạn có vẻ là cách tiếp cận chính xác –

Trả lời

14
let maximum = data.reduce(0.0) { max($0, $1.1) } 

Chỉ cần nhanh chóng sử dụng reduce.

hay:

data.values.max() 

Output:

print(maximum) // 5.828 
+0

'maxElement()' đã được đổi tên thành 'max()'. –

4

tồn tại một hàm trong API, tên maxElement bạn có thể sử dụng nó rất dễ dàng, mà trả về phần tử tối đa trong self hoặc nil nếu chuỗi trống và yêu cầu phải đóng strict weak ordering trong trường hợp của bạn khi bạn sử dụng từ điển. Bạn có thể sử dụng như trong ví dụ sau:

var data : [Float:Float] = [0:0,1:1,2:1.414,3:2.732,4:2,5:5.236,6:3.469,7:2.693,8:5.828,9:3.201] 
let element = data.maxElement { $0.1 < $1.1} // (.0 8, .1 5.828) 

Và nhận giá trị tối đa bằng các giá trị, nhưng bạn có thể thay đổi khi bạn muốn sử dụng nó qua các phím, tùy bạn.

Tôi hy vọng điều này sẽ giúp bạn.

1

Từ điển Swift cung cấp phương thức max (by :). Các thí dụ từ Apple là như sau:

let hues = ["Heliotrope": 296, "Coral": 16, "Aquamarine": 156] 
let greatestHue = hues.max { a, b in a.value < b.value } 
print(greatestHue) 
// Prints "Optional(("Heliotrope", 296))" 
Các vấn đề liên quan