gpt4 book ai didi

arrays - 检查结构字符串数组是否包含另一个字符串数组的元素

转载 作者:行者123 更新时间:2023-11-28 07:24:07 24 4
gpt4 key购买 nike

我创建了一个结构元素数组。这些结构包含一个字符串数组。我想检查这些字符串是否恰好在另一个字符串数组中。

我该怎么做或者我应该使用哪些工具?

我发现我可以使用名为“Set”的命令,但它似乎不适用于结构中的数组。

import UIKit

// Define structure
struct Drink {
var name: String
var content: Array<String>
var amount: Array<Int>
var desc: String
}

// Define drinks
var mojito = Drink(name: "Mojito", content: ["Rum","Club soda"], amount: [4,20], desc: "Summer drink")
var vodkaJuice = Drink(name: "Vodka juice", content: ["Vodka","Juice"], amount: [4,20], desc: "Cheap alcohol")
var list = [mojito,vodkaJuice]

// Define what ingredients you have
var stock = ["Gin", "Vodka", "Juice", "Club soda"]

我如何列出我可以用现有的饮料制作的饮料 list ?

最佳答案

使用 Set 而不是数组,这样您就可以简单地进行子集检查:

import UIKit

// Define structure
struct drink {
var name : String
var content : Set<String> // we use a Set instead
var amount : Array<Int>
var desc : String
}

// Define drinks
var mojito = drink(name: "Mojito", content: ["Rum","Club soda"], amount: [4,20], desc: "Summer drink")
var vodkaJuice = drink(name: "Vodka juice", content: ["Vodka","Juice"], amount: [4,20], desc: "Cheap alcohol")
var list = [mojito,vodkaJuice]

// Define what ingredients you have
var stock = ["Gin", "Vodka", "Juice", "Club soda"]

// find all instances of drinks where their contents
// are subsets of what you have in stock
let drinks = list.filter { $0.content.isSubset(of: stock) }

使用集合而不是“for 循环内的 for 循环”的重要性在于性能。 Set 使用内部哈希表以极快的方式查找项目。因此,对于列表中的 N 件商品和库存中的 M 件商品,查找的总体复杂度为 O(N.logM)。

如果您使用 for 循环完成它,其复杂度将为 O(N.M),这可能需要更长的时间并消耗更多的电池,具体取决于您拥有的元素数量。

但这并不意味着您应该始终使用集合。集合有折衷。它们带来了性能,但它们的初始构建速度较慢并且不支持重复项。仅在此类特定情况下使用它们。永远不要因为“它们更快”而使用集合,而是在它们解决您的特定问题时使用它们。

我强烈建议您浏览一下 Swift 运行时提供的那些额外的数据结构,这样您就会知道使用哪个以及何时使用。

关于arrays - 检查结构字符串数组是否包含另一个字符串数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com