颤振:将列表值匹配到映射列表键值

Posted

技术标签:

【中文标题】颤振:将列表值匹配到映射列表键值【英文标题】:flutter: match list value to map list key value 【发布时间】:2021-09-02 05:47:24 【问题描述】:

这里是新手。有谁知道我如何将列表 x 的值与列表 y 的键 [“id”] 的值相匹配?

提前谢谢你!感谢任何帮助。 =)

list x = ["open_box", "close_box"];
list y = 
[
    
        "id": "open_box",
        "name": "Open",
        "action": ["open_box"]
    ,
    
        "id": "close_box",
        "name": "Close",
        "action": ["open_box", "close_box", "pull_box"]
    ,
    
        "id": "pull_box",
        "name": "Pull",
        "action": ["open_box", "close_box", "pull_box", "push_box"]
    
]

【问题讨论】:

【参考方案1】:
    list x = ["open_box", "close_box"];
    list y = 
    [
        
            "id": "open_box",
            "name": "Open",
            "action": ["open_box"]
        ,
        
            "id": "close_box",
            "name": "Close",
            "action": ["open_box", "close_box", "pull_box"]
        ,
        
            "id": "pull_box",
            "name": "Pull",
            "action": ["open_box", "close_box", "pull_box", "push_box"]
        
    ];
    var i,j;
    var yy=jsonDecode(y);
for(j=0;j<=x.length;j++)
    for(i=0;i<=yy.length;i++)

    if(yy[i]['id'].contains(x[j]))
    
    //Do something if true
    print(yy[i]);
    
    
    

此代码比较 x[0] 表示“open_box”与所有 y 的 Maped 数据列表,它将在条件为真时打印索引值

【讨论】:

【参考方案2】:

使用for in循环x,最后可以使用List中的where方法

for (String action in x) 
  dynamic temp = y.where((data) => data['id'] == action);
  if (temp.isNotEmpty) 
    // do someting
    print(temp);
  


参考:Dart Documentation - List

【讨论】:

【参考方案3】:

List 提供了一个where 方法,允许您根据条件过滤列表。这里我使用y 列表的where 方法并在x 列表中搜索y 列表中当前项的id 值。我检查了x 列表的搜索长度,如果它大于零,那么我们在x 列表中找到了该id 的匹配项。 z 将在y 列表中保存与x 列表中的ID 匹配的项目列表。

List x = ["open_box", "close_box"];
List y = 
[
        
                "id": "open_box",
                "name": "Open",
                "action": ["open_box"]
        ,
        
                "id": "close_box",
                "name": "Close",
                "action": ["open_box", "close_box", "pull_box"]
        ,
        
                "id": "pull_box",
                "name": "Pull",
                "action": ["open_box", "close_box", "pull_box", "push_box"]
        
];
var z = y.where((data) => x.where((value) => value==data["id"]).length>0);
print(z);

这是预期的输出

I/flutter ( 6086): (id: open_box, name: Open, action: [open_box], id: close_box, name: Close, action: [open_box, close_box, pull_box])

【讨论】:

以上是关于颤振:将列表值匹配到映射列表键值的主要内容,如果未能解决你的问题,请参考以下文章

Restkit 映射列表 - 没有响应描述符与加载的响应匹配

将一个文件中的标头值匹配到 R 中的文件列表

Erlang 记录与映射组

SQL查询将与多个范围匹配的数字列表转换为值列表

具有精确键列表的模式匹配映射

带有python中键值对列表的配置文件