You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中对比两个列表提取相同数据并打印或上传Firestore的实现问题

Dart 双手机号列表匹配实现方案

你现有的双层循环遍历逻辑已经可以实现匹配手机号并打印的需求,但是存在遍历效率低的问题,以下是优化后的实现方案:

优化实现(求交集法,时间复杂度O(n+m))

直接将在线列表转为集合做存在性校验,或者两个列表转集合直接求交集,相比双层遍历效率提升明显:

// 方案1:直接求交集得到所有匹配手机号(自动去重)
final matchedPhones = formattedPhonesLocal.toSet().intersection(formattedPhonesOnline.toSet());

// 打印匹配结果
for (final phone in matchedPhones) {
  print("匹配到手机号:$phone");
}

匹配结果上传Firestore示例

如果需要将匹配到的手机号批量上传到Firestore,可以参考以下代码:

import 'package:cloud_firestore/cloud_firestore.dart';

// 初始化Firestore实例
final firestore = FirebaseFirestore.instance;
// 开启批量写入
final writeBatch = firestore.batch();

for (final phone in matchedPhones) {
  // 替换为实际的集合路径与字段结构
  final docRef = firestore.collection("matched_phones").doc(phone);
  writeBatch.set(docRef, {
    "phone": phone,
    "create_time": FieldValue.serverTimestamp()
  });
}

// 提交批量写入请求
await writeBatch.commit();

特殊场景适配

  • 如果需要保留单个列表内的重复手机号匹配结果(不需要去重),可以使用如下实现:
final onlinePhoneSet = formattedPhonesOnline.toSet();
// 遍历本地列表,只要在线列表存在就保留,不去重
final matchedPhonesWithDuplicate = formattedPhonesLocal.where((phone) => onlinePhoneSet.contains(phone));
for (final phone in matchedPhonesWithDuplicate) {
  print("匹配到手机号:$phone");
}
  • 匹配前建议先校验两个列表的手机号格式化规则完全一致,避免因前缀、空格、分隔符差异导致匹配失败

内容的提问来源于stack exchange,提问作者Ini Hood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:54:07