我有一个看起来像这样的数据库:
火力地堡
餐厅
麦当劳
菜单项1:汉堡
菜单项2:薯条
菜单项3:饮料
肯德基
菜单项1:鸡肉
菜单项2:土豆泥
菜单项3:饮料
Taco Bell
菜单项1:taco
菜单项2:墨西哥卷饼
菜单项3:饮料
如何在没有相应菜单项的情况下检索只有餐馆名称(数组或字典很好)的列表?
输出最好看起来像[“McDonalds”,“KFC”,“Taco Bell”],带有可访问的索引或键。
答案 0 :(得分:2)
答案是,你不能只返回钥匙。由于文本数据和节点名称之间存在太多联系,因此问题中的结构可能会带来一些挑战。
这是一个可选结构,可以将所有内容分开,以便于查询。
restaurants
restaurant_id_0
restaurant_ref: restaurant_name_0
menu:
menu_id_0:
name: Burger
menu_id_1
name: Fries
menu_id_2
name: Beer!
restaurant_id_1
restaurant_ref: restaurant_name_1
menu
menu_id_0:
name: Roast Beef Classic
menu_id_1
name: Curly Fries
menu_id_2
name: Milkshake
然后是名字
restaurant_names
restaurant_name_0: McDonalds
restaurant_name_1: Arby's
使用此结构,您将字符串数据与包含数据的节点分开,这使您可以轻松查询restaurent_name节点中的所有餐馆名称。您还可以在菜单上查询哪些餐馆有汉堡。甚至找到提供奶昔的那些。
我甚至可能会建议打破菜单以进一步压缩数据。
menus
restaurent_id_0
menu_id_0:
name: Burger
menu_id_1
name: Fries
menu_id_2
name: Beer!
如果Arby决定用Roast Beef Max代替烤牛肉经典(哦不!),那么这些结构中的任何一个都会起作用,这个结构的好处之一是你可以改变它名称组件,不影响其他数据
/restaurant_id_1/menu/menu_id_0/name = "Roast Beef Max"
答案 1 :(得分:1)
您可以执行以下操作:
<div style="width: 200px;height:200px;padding:50px;background-color: lightcyan" id="maindiv" onclick="subdiv()"></div>
restaurantNames将拥有您要求的阵列。您仍然从firebase接收完整的餐馆对象,但只使用他们的密钥(名称)。
答案 2 :(得分:0)
您可以通过下面的approch完成此操作: -
func getDataSource()
{
let macdArray = ["Menu Item 1" : "burger","Menu Item 2" : "fries","Menu Item 3" : "drink"]
let macdDict = ["McDonalds":macdArray]
let kfcArray = ["Menu Item 1" : "chicken","Menu Item 2" : "mashed potatoes","Menu Item 3" : "drink"]
let kfcDict = ["KFC":kfcArray]
let tacobellDArray = ["Menu Item 1" : "taco","Menu Item 2" : "burrito","Menu Item 3" : "drink"]
let tacobellDict = ["Taco Bell":tacobellDArray]
let restaurentArray = [macdDict,kfcDict,tacobellDict] as NSMutableArray
let restaurentDict = ["restaurants":restaurentArray]
let parentDict = ["Firebase":restaurentDict] as NSDictionary
print(parentDict.objectForKey("Firebase")?.objectForKey("restaurants"))
let consolidatedArray = NSMutableArray()
for var i = 0; i < restaurentArray.count; i++ {
consolidatedArray.addObject(restaurentArray.objectAtIndex(i).allKeys)
}
print(consolidatedArray)
}
我已将您的数据用作静态数据,您只需要替换从后端接收的数据。
希望这适合你。
答案 3 :(得分:0)
我自己就是新手了虽然整个火基都很棒,但教程对我来说有点模糊。恐龙rah rah等无论如何,花了很多年的时间摆弄数组来填充表格,我开始得到它。或者可能不是?不知道。但是很确定你可以通过观察事件类型childAdded来获取密钥,然后使用snapshot.value来为你提供整个malark迭代和snapshot.key,它一次为你提供一个密钥: var boink = snapshot.key MyboinkArray.append(boink)