Arrays 如何从Swift中的字符串数组中筛选对象
我有一个allMenuItems数组,如下所示,我正试图从Id数组中筛选它。如何在Swift中实现这一点?我对高阶函数有一些了解,但到目前为止,我无法成功地过滤这个函数。欢迎就如何实现这一目标提出任何建议,谢谢Arrays 如何从Swift中的字符串数组中筛选对象,arrays,swift,Arrays,Swift,我有一个allMenuItems数组,如下所示,我正试图从Id数组中筛选它。如何在Swift中实现这一点?我对高阶函数有一些了解,但到目前为止,我无法成功地过滤这个函数。欢迎就如何实现这一目标提出任何建议,谢谢 struct MenuItems { var id: String var name: String init() { self.id = "" self.name = "" } } var m1 = MenuItems
struct MenuItems {
var id: String
var name: String
init() {
self.id = ""
self.name = ""
}
}
var m1 = MenuItems()
m1.id = "1"
m1.name = "Name 1"
var m2 = MenuItems()
m2.id = "2"
m2.name = "Name 2"
var m3 = MenuItems()
m3.id = "3"
m3.name = "Name 3"
var allMenuItems: [MenuItems] = [m1, m2, m3] // [{id "1", name "Name 1"}, {id "2", name "Name 2"}, {id "3", name "Name 3"}]
var anArrayOfIds: [String] = ["1", "3"]
过滤后的输出将是:
var filteredMenuItems: [MenuItems] = [m1, m3] // [{id "1", name "Name 1"}, {id "3", name "Name 3"}]
有什么建议吗?怎么样
let filteredMenuItems=allMenuItems.filter{anArrayOfIds.contains($0.id)}
这给了我带1和3的项目
我冒昧地更新了您的代码:
struct MenuItems {
let id: String
let name: String
}
let m1 = MenuItems(id: "1", name: "Name 1")
let m2 = MenuItems(id: "2", name: "Name 2")
let m3 = MenuItems(id: "3", name: "Name 3")
let allMenuItems = [m1, m2, m3]
let anArrayOfIds: [String] = ["1", "3"]
let filteredMenuItems = allMenuItems.filter { anArrayOfIds.contains($0.id)}
希望对你有所帮助,怎么样
let filteredMenuItems=allMenuItems.filter{anArrayOfIds.contains($0.id)}
这给了我带1和3的项目
我冒昧地更新了您的代码:
struct MenuItems {
let id: String
let name: String
}
let m1 = MenuItems(id: "1", name: "Name 1")
let m2 = MenuItems(id: "2", name: "Name 2")
let m3 = MenuItems(id: "3", name: "Name 3")
let allMenuItems = [m1, m2, m3]
let anArrayOfIds: [String] = ["1", "3"]
let filteredMenuItems = allMenuItems.filter { anArrayOfIds.contains($0.id)}
希望这对您有所帮助您可以这样做:
let filteredMenuItems = allMenuItems.filter { anArrayOfIds.contains($0.id) }
我建议你:
- 删除无意义的初始值设定项
- 将
设为整数id
- 如果属性在初始化后不会更改,则使用
而不是let
var
- 将anarrayofid设置为集合而不是数组,因为
方法将是O(1)而不是O(n)contains
struct MenuItems {
let id: Int
let name: String
}
let m1 = MenuItems(id: 1, name: "Name 1")
let m2 = MenuItems(id: 2, name: "Name 2")
let m3 = MenuItems(id: 3, name: "Name 3")
let allMenuItems: [MenuItems] = [m1, m2, m3]
var aSetOfIds: Set<Int> = [1, 3] //I used a var if aSetOfIds could be changed
var filteredMenuItems = allMenuItems.filter { aSetOfIds.contains($0.id) }
结构菜单项{
让id:Int
let name:String
}
设m1=MenuItems(id:1,name:“name 1”)
设m2=MenuItems(id:2,名称:“名称2”)
设m3=菜单项(id:3,名称:“名称3”)
让所有MenuItems:[MenuItems]=[m1,m2,m3]
var-aSetOfIds:Set=[1,3]//如果可以更改aSetOfIds,我就使用了一个var
var filteredMenuItems=allMenuItems.filter{aSetOfIds.contains($0.id)}
您可以这样做:
let filteredMenuItems = allMenuItems.filter { anArrayOfIds.contains($0.id) }
我建议你:
- 删除无意义的初始值设定项
- 将
设为整数id
- 如果属性在初始化后不会更改,则使用
而不是let
var
- 将anarrayofid设置为集合而不是数组,因为
方法将是O(1)而不是O(n)contains
struct MenuItems {
let id: Int
let name: String
}
let m1 = MenuItems(id: 1, name: "Name 1")
let m2 = MenuItems(id: 2, name: "Name 2")
let m3 = MenuItems(id: 3, name: "Name 3")
let allMenuItems: [MenuItems] = [m1, m2, m3]
var aSetOfIds: Set<Int> = [1, 3] //I used a var if aSetOfIds could be changed
var filteredMenuItems = allMenuItems.filter { aSetOfIds.contains($0.id) }
结构菜单项{
让id:Int
let name:String
}
设m1=MenuItems(id:1,name:“name 1”)
设m2=MenuItems(id:2,名称:“名称2”)
设m3=菜单项(id:3,名称:“名称3”)
让所有MenuItems:[MenuItems]=[m1,m2,m3]
var-aSetOfIds:Set=[1,3]//如果可以更改aSetOfIds,我就使用了一个var
var filteredMenuItems=allMenuItems.filter{aSetOfIds.contains($0.id)}
您可以使用过滤器和包含
let filtered = allMenuItems.filter( { anArrayOfIds.contains($0.id) })
您可以使用筛选器和contains
let filtered = allMenuItems.filter( { anArrayOfIds.contains($0.id) })
首先,请不要在像这样的结构中使用奇怪的语法
init() {
self.id = ""
self.name = ""
}
删除init
方法并使用隐式memberwise初始值设定项创建项,方法是以单数形式命名表示单个对象的结构:
let m1 = MenuItem(id: "1", name: "Name 1")
您甚至可以将成员声明为常量
struct MenuItem {
let id, name : String
}
不要注释编译器可以推断的类型
使用另一个
id
值数组过滤数组
let filteredMenuItems = allMenuItems.filter{ anArrayOfIds.contains($0.id) }
首先,请不要在像这样的结构中使用奇怪的语法
init() {
self.id = ""
self.name = ""
}
删除init
方法并使用隐式memberwise初始值设定项创建项,方法是以单数形式命名表示单个对象的结构:
let m1 = MenuItem(id: "1", name: "Name 1")
您甚至可以将成员声明为常量
struct MenuItem {
let id, name : String
}
不要注释编译器可以推断的类型
使用另一个
id
值数组过滤数组
let filteredMenuItems = allMenuItems.filter{ anArrayOfIds.contains($0.id) }
var-id:String
,self.id=”“
,这在Swift中是非常糟糕的做法。不要在不需要的地方添加易变性,也不要使用非感官默认值(名称为“”
)@Alexander-谢谢。这不是实际使用的代码。var-id:String
,self.id=”“
,这在Swift中是非常糟糕的做法。不要在不需要的地方添加易变性,也不要使用非感官默认值(名称为“”
)@Alexander-谢谢。这不是实际使用的代码。是的,抱歉。这不是实际的代码,是匆忙拼凑起来的。不过,我没有借口。是的,道歉。这不是实际的代码,是匆忙拼凑起来的。不过,我没有任何借口。正如前面提到的,这是匆忙起草的,我已经为此受到了抨击。id实际上是一个GUID,而这些代码本身都不是真的。不过,我想我还是会投下票的。谢谢你的回复。如前所述,这是仓促起草的,我已经接受了抨击。id实际上是一个GUID,而这些代码本身都不是真的。不过,我想我还是会投下票的。谢谢你的回复。