【问题标题】:How do I compare 3 arraylists and replace data in the 3rd arraylist?如何比较 3 个数组列表并替换第三个数组列表中的数据?
【发布时间】:2012-06-10 06:28:42
【问题描述】:

我有一个独特的短信问题:

最终目标是将列表中显示的电话号码替换为联系人姓名

(这些都是字符串数组列表)

ArrayList3 包含代表电话号码选择的 6 个元素。 ArrayList2 包含代表所有可用电话号码的 31 个元素。 ArrayList1 包含 31 个元素,分别以相同的顺序表示所有电话号码的名称到 ArrayList2。

我如何将它们全部与这种效果进行比较:

"如果Arraylist3的元素等于ArrayList2中的一个元素,复制ArrayList3ArrayList2的相同位置> 并将其放入 ArrayList3。”

大致上,我试图做的是将 ArrayList3 的元素与 ArrayList2 中的相同元素进行匹配。从那里,使用 ArrayList2 的位置得到 ArrayList1 的相同位置,然后将该位置的数据 (ArrayList1) 复制到 ArrayList3.

关于如何实现这一目标的任何想法?

【问题讨论】:

  • 什么意思是“将ArrayList3复制到ArrayList2的相同位置,放到ArrayList3中”?
  • 所有的arraylist都是同一类型吗?
  • @JakeWilson801 都是ArrayList

标签: android arraylist sms


【解决方案1】:

不要将ArrayList<String> 用于 ArrayList1 和 ArrayList2。将数据合并为Map<String,String>

Map 基本上使用<key, value> 结构,所以不要让ArrayList1 包含“名称”和ArrayList2 包含“数字”,只需采用Map<name,number> 方法,然后找到从@ 获得的值(即数字) 987654328@ 在Map

Map

【讨论】:

  • 我不明白如何完全实现这一点。我已将 ArrayList1 和 2 转换为字符串以与 Map 一起使用,但我不知道下一步该做什么。
【解决方案2】:

我尝试了以下方法,它对我有用:

ArrayList<String> arrayList1 = new ArrayList<String>();
    ArrayList<String> arrayList2 = new ArrayList<String>();
    ArrayList<String> arrayList3 = new ArrayList<String>();
    arrayList1.add("Welcome");
    arrayList1.add("Home");

    arrayList2.add("1");
    arrayList2.add("2");

    arrayList3.add("2");



    for(int i=0; i< arrayList3.size(); i++){
        if(arrayList2.contains(arrayList3.get(i))){
            int index = arrayList2.indexOf(arrayList3.get(i));
            arrayList3.set(i, arrayList1.get(index));
            //Toast.makeText(this, "Found " + arrayList3.get(i), Toast.LENGTH_LONG).show();
        }
    }

【讨论】:

  • 您能数一数您的决定的复杂性吗?您将为每个元素扫描 arrayList2 多少次
  • 我接受@Squonk 提供的解决方案是优化的解决方案,但如果@ChocoMan 不想改变他的数据结构并想使用现有结构,他可以采用我提供的解决方案
  • 这正是我想要保持相同结构的。不过,这适用于 1 个名称。
  • @ChocoMan 当您说代码适用于 1 个名称时,我不确定您的意思是什么,因为我能够使用来自 arrayList1 的值更新多个名称的 arraylist3。为简单起见,我在 arraylist3 中仅添加了一个值,但代码确实适用于多个值。
  • 由于某种原因,当我应用您的代码时,只有 arrayList3.get(2) 更改为名称。所有其他元素都保留为电话号码。我还在 logcat 中检查了它,它也说了同样的话。
【解决方案3】:

基本上,您只是尝试使用 ArrayList1(具有名称)和 ArrayList2(具有数字)以相同的顺序将数字转换为 ArrayList3(具有更新的索引)中的名称............ .

在同一个 ArrayList3 中读取和写入数据时,应该多使用一个数组列表。所以有可能任何名称都可以替换 i+ 索引处尚未处理的任何数字........

【讨论】:

  • 我无法弄清楚如何执行此操作。我想要做的是将 ArrayList3 的名称与 ArrayList2 匹配。然后利用ArrayList2的位置去ArrayList1。然后将 ArrayList3 中的电话号码替换为 ArrayList1 位置的联系人姓名。
  • ArrayList2 只是将 ArrayList1 和 3 连接在一起的中间人。唯一会改变的数据是 ArrayList3。 3 与 2 比较,然后 2 与 1 比较,如果有意义,则将 3 替换为 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2018-09-27
  • 1970-01-01
相关资源
最近更新 更多