gpt4 book ai didi

Scala - 在列表中查找特定的元组

转载 作者:行者123 更新时间:2023-12-03 23:28:36 25 4
gpt4 key购买 nike

假设我们有这个元组列表:

val data = List(('a', List(1, 0)), ('b', List(1, 1)), ('c', List(0)))
该列表具有以下签名:
List[(Char, List[Int])]
我的任务是从“data”内的元组中获取“List[Int]”元素,其键是例如字母“b”。如果我实现了像“findIntList(data, 'b')”这样的方法,那么我期望 List(1, 1) 作为结果。我尝试了以下方法:
  • data.foreach { elem => if (elem._1 == char) return elem._2 }
  • data.find(x=> x._1 == ch)
  • for (elem <- data) yield elem match {case (x, y: List[Bit]) => if (x == char) y}
  • for (x <- data) yield if (x._1 == char) x._2

  • 使用所有方法(除了方法 1,我使用了明确的“返回”),我得到了 List[Option]List[Any]我不知道如何从中提取“ List[Int]”。

    最佳答案

    多种方式之一:

    data.toMap.get('b').get
    toMap将 2 元组列表转换为 Map从元组的第一个元素到第二个元素。 get为您提供给定键的值并返回 Option ,因此您需要另一个 get实际获取列表。

    或者你可以使用:
    data.find(_._1 == 'b').get._2 

    备注 : 只能使用 get on Option当您可以保证您将拥有 Some而不是 None .见 http://www.scala-lang.org/api/current/index.html#scala.Option关于如何使用 Option 惯用语。

    更新:解释您使用不同方法看到的结果类型

    方法二 : find 返回一个 Option[List[Int]] 因为它不能保证找到匹配的元素。

    方法三 : 在这里你基本上做了一个 map ,即您对集合的每个元素应用一个函数。对于您正在查找的元素,该函数为所有其他元素返回您的 List[Int],它包含值 ()这是 Unit值,大致相当于 void在 Java 中,但实际类型。由于 'List[Int]' 和 'Unit' 唯一常见的父类(super class)型是 'Any',因此您会得到一个 'List[Any]' 作为结果。

    方法四 与#3基本相同

    关于Scala - 在列表中查找特定的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16206414/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com