Arrays 如何从数组字典中的整数数组中获取最大值

Arrays 如何从数组字典中的整数数组中获取最大值,arrays,swift,dictionary,Arrays,Swift,Dictionary,我正在尝试获取数组字典中的最大值,还需要获取该数组的键 这就是我获得最大价值的方式: let interestingNumbers = [ "Prime": [2, 3, 5, 7, 11, 13], "Fibonacci": [1, 1, 2, 3, 5, 8], "Square": [1, 4, 9, 16, 25] ] var largest = 0 for (kind, numbers) in interestingNumbers { for numbe

我正在尝试获取数组字典中的最大值,还需要获取该数组的键

这就是我获得最大价值的方式:

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25]
]
var largest = 0

for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}

您可以使用Swift函数来实现这一点

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
    ]

if let value = interestingNumbers.map ({ ($0, $1.max() ?? 0) }).max(by: { $0.1 < $1.1 }) {
    print(value.0, value.1) // Square 25
}
现在从元组数组中找到max
Int

if let value = array.max(by: { $0.1 < $1.1 }) {
    print(value.0, value.1) //Will print group here it is "Square 25"
}
如果let value=array.max(by:{$0.1<$1.1}){
print(value.0,value.1)//将在此处打印组,它是“Square 25”
}

您可以使用Swift函数进行此操作

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
    ]

if let value = interestingNumbers.map ({ ($0, $1.max() ?? 0) }).max(by: { $0.1 < $1.1 }) {
    print(value.0, value.1) // Square 25
}
现在从元组数组中找到max
Int

if let value = array.max(by: { $0.1 < $1.1 }) {
    print(value.0, value.1) //Will print group here it is "Square 25"
}
如果let value=array.max(by:{$0.1<$1.1}){
print(value.0,value.1)//将在此处打印组,它是“Square 25”
}

为什么不使用元组来保存最大值

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]

var largest: (kind: String?, number: Int) = (nil, 0)

for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest.number {
            largest = (kind, number)
        }
    }
}
可进一步简化为:

var largest: (kind: String?, number: Int) = (nil, 0)

for (kind, numbers) in interestingNumbers {
    let max = numbers.max() ?? 0
    if max > largest.number {
        largest = (kind, max)
    }
}
另一种方法是首先将值展平为
(种类、编号)
序列:

let flattened = interestingNumbers
    .map { (kind, numbers) in numbers.map { (kind, $0) } }
    .joined()

let largest = flattened.max(by: { $0.1 < $1.1} )
print(largest)
let=interestingNumbers
.map{(种类,数字)在数字中.map{(种类,$0)}
.加入
设max=flatted.max(by:{$0.1<$1.1})
打印(最大)
或者您可以认识到,每个数组中只有最大值才是最重要的,因此:

let largestPerKind = interestingNumbers
    .map { (kind, numbers) in (kind, numbers.max() ?? 0) }

let largest = largestPerKind.max(by: { $0.1 < $1.1} )
print(largest)
让largestPerKind=感兴趣的数字
.map{(种类,数字)在(种类,数字.max()??0)}
设max=largestPerKind.max(by:{$0.1<$1.1})
打印(最大)

为什么不使用元组来保存最大值

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]

var largest: (kind: String?, number: Int) = (nil, 0)

for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest.number {
            largest = (kind, number)
        }
    }
}
可进一步简化为:

var largest: (kind: String?, number: Int) = (nil, 0)

for (kind, numbers) in interestingNumbers {
    let max = numbers.max() ?? 0
    if max > largest.number {
        largest = (kind, max)
    }
}
另一种方法是首先将值展平为
(种类、编号)
序列:

let flattened = interestingNumbers
    .map { (kind, numbers) in numbers.map { (kind, $0) } }
    .joined()

let largest = flattened.max(by: { $0.1 < $1.1} )
print(largest)
let=interestingNumbers
.map{(种类,数字)在数字中.map{(种类,$0)}
.加入
设max=flatted.max(by:{$0.1<$1.1})
打印(最大)
或者您可以认识到,每个数组中只有最大值才是最重要的,因此:

let largestPerKind = interestingNumbers
    .map { (kind, numbers) in (kind, numbers.max() ?? 0) }

let largest = largestPerKind.max(by: { $0.1 < $1.1} )
print(largest)
让largestPerKind=感兴趣的数字
.map{(种类,数字)在(种类,数字.max()??0)}
设max=largestPerKind.max(by:{$0.1<$1.1})
打印(最大)

我会在字典值中使用max方法,并从结果元组值中获取最大值:

if let result = interestingNumbers.max(by: {$0.value.max() ?? 0 < $1.value.max() ?? 0}),
    let maxValue = result.value.max() {
    print(result.key)    // "Square\n"
    print(result.value)  // "[1, 4, 9, 16, 25]\n"
    print(maxValue)      // 25
}
如果let result=interestingNumbers.max(by:{$0.value.max()??0<$1.value.max()??0}),
设maxValue=result.value.max(){
打印(result.key)/“Square\n”
打印(result.value)/“[1,4,9,16,25]\n”
打印(最大值)//25
}

我会在字典值中使用max方法,并从结果元组值中获取最大值:

if let result = interestingNumbers.max(by: {$0.value.max() ?? 0 < $1.value.max() ?? 0}),
    let maxValue = result.value.max() {
    print(result.key)    // "Square\n"
    print(result.value)  // "[1, 4, 9, 16, 25]\n"
    print(maxValue)      // 25
}
如果let result=interestingNumbers.max(by:{$0.value.max()??0<$1.value.max()??0}),
设maxValue=result.value.max(){
打印(result.key)/“Square\n”
打印(result.value)/“[1,4,9,16,25]\n”
打印(最大值)//25
}

简单而优雅:)@IvensDenner谢谢伙计:)简单而优雅:)@IvensDenner谢谢伙计:)非常直接谢谢。尽管我不明白你所说的展平方法中发生了什么…@Timi.O第一步生成了一个2元组数组
[(“Prime”,2),(“Prime”,3),…],[(“Fibonacci”,1),(“Fibonacci”,1)…],…]
,(
.joined()
)调用将其展平为一个平面数组
[(“Prime”,2),(“Prime”,3)(“Fibonacci”,1),(“Fibonacci”,1)…]
非常直截了当的感谢。虽然我不明白你所说的展平方法中发生了什么…@Timi.O第一步生成一个2元组数组
[(“Prime”,2),(“Prime”,3),…],[(“Fibonacci”,1),…]
,(
.joined()
)调用将其展平为一个平面数组
[(“Prime”,2),(“Prime”,3),…,(“Fibonacci”,1),(“Fibonacci”,1)…]