我有一个这样的位置数据地图:
{
'country': 'Japan',
'city': 'Tokyo',
'Latitude': 35.6762,
'Longitude': 139.6503,
'utcOffset': 9
}
女巫是存储此数据的正确解决方案,为什么?
1)地图列表:
List<Map<String, dynamic>> locations = [
{
'country': 'Japan',
'city': 'Tokyo',
'Latitude': 35.6762,
'Longitude': 139.6503,
'utcOffset': 9
}
];
或多级数据对象
var locations = {
{
'country': 'Egypt',
'city': 'Cairo',
'Latitude': 30.033333,
'Longitude': 31.233334,
'utcOffset': 2
},
{
'country': 'Thailand',
'city': 'Bangkok',
'Latitude': 13.7563,
'Longitude': 100.5018,
'utcOffset': 7
},
};
在两种情况下如何访问数据?
答案 0 :(得分:2)
当我想拥有键值对时,我通常使用Map
,因为我可以直接通过键获取值。例如,如果您有Map
名员工,并且将员工ID保留为密钥,则可以轻松访问它。特别适合搜索或下拉菜单。
在大多数情况下,如果我可以避免使用Map
,而我会使用List
,因为对我来说,处理大量数据非常容易(在Flutter中,我可以轻松地将列表扔到ListView上) )。
但是根据情况的不同,两者都有自己的优势。请注意,Map
不能有重复的密钥,而List
不能具有这样的限制(例如:Map
可以用来避免重复)。
var locations = {
{
'country': 'Egypt',
'city': 'Cairo',
'Latitude': 30.033333,
'Longitude': 31.233334,
'utcOffset': 2
},
{
'country': 'Thailand',
'city': 'Bangkok',
'Latitude': 13.7563,
'Longitude': 100.5018,
'utcOffset': 7
},
};
for (var element in locations) {
print(element["country"]);
}
// or
locations.forEach((element) => print(element["country"]));
以下是有关此文档的内容:
键/值对的集合,您可以使用来从中检索值 其关联的密钥。
地图中键的数量有限,每个键都具有 一个与之相关的值。
可以迭代映射及其键和值。的顺序 迭代由地图的个别类型定义。
具有长度的对象的可索引集合。
此类的子类实现不同类型的列表。最多 常见的列表类型是:
Fixed-length list. An error occurs when attempting to use operations that can change the length of the list. Growable list. Full implementation of the API defined in this class.
新的
List()
或[]
返回的默认可增长列表会保留一个 内部缓冲区,并在必要时增加该缓冲区。这保证了 一系列的添加操作将分别摊销 恒定的时间。直接设置长度可能需要一定的时间 到新的长度,并且可能会更改内部容量,以便 以下添加操作将需要立即增加缓冲区 容量。其他列表实现可能具有不同的性能 行为。
答案 1 :(得分:1)
您可以同时使用这两种方法,但是首选第一种方法,因为它更容易遍历所有项目并获取数据。 不是说您不能遍历第二个数据集,而是要遍历数组更加繁琐。
鉴于您的对象数组如下所示:
List<Map<String, dynamic>> locations = [
{
'country': 'Japan',
'city': 'Tokyo',
'Latitude': 35.6762,
'Longitude': 139.6503,
'utcOffset': 9
}
];
假设您要取出所有国家/地区名称并将它们存储在单独的数组中,这真的很容易,并且代码应如下所示:
List<String> countryNames = [];
locations.forEach((location) => countryNames.add(location['country]));
答案 2 :(得分:0)
您可以从创建此函数的 Map 动态获取数据 getData
dynamic getData(Map data, List<String> way) {
dynamic dataTemp = data;
if (way.length > 0) {
for (int x=0; x < way.length; x++) {
dataTemp = dataTemp[way[x]];
}
}
return dataTemp;
}
List<Map<String, dynamic>> locations = [
{
'country': 'Japan',
'city': 'Tokyo',
'Latitude': 35.6762,
'Longitude': 139.6503,
'utcOffset': 9,
'example' : {
'data' : "text",
'number' : 20,
'boolean': false
}
}
];
getData(locations[0],["example","number"]);
输出:20