当前位置: 首页 > 知识库问答 >
问题:

Scala:使用数组中的值在另一个数组中搜索

郑桐
2023-03-14

我有两个数组:

globalaray:Array(Int,Array[String])SpecificArray:Array(Int,Int)

它们中的第一个Int是一个键,我想从GlobalArray中获取与该键对应的元素。

在伪代码中:

val v1
For each element of SpecificArray
    Get the corresponding element from GlobalArray to use its Array[String]
         If (sum <= 100)
             for each String of the Array
                 update v1 
                 // ... some calculation
                 sum += 1

println (v1)

我知道使用<code>。map()我可以遍历<code>SpecificArray

SpecificArray.map{x => val in_global = GlobalArray.filter(e => (e._1 == x._1))
                       // I don't know how to follow
                  }

共有3个答案

丘普松
2023-03-14

sum如何影响逻辑以及v1到底是什么,从您的代码中尚不清楚,但看起来您多次搜索GlobalArray。如果是这样,则将此数组转换为更易于搜索的数据结构是有意义的:Map。你可以这样做

val globalMap = GlobalArray.toMap

然后你可以像这样连接琴弦

println(SpecificArray.flatMap({case (k,v) => globalMap(k).map(s => (k,v,s))}).toList)

如果您只需要字符串,则可以使用

println(SpecificArray.flatMap({case (k,v) => globalMap(k)}).toList)

请注意,此代码假定对于SpecificArray中的每个键,GlobalArray中都会有一个匹配的键。如果不是这种情况,您应该使用其他方法访问Map,如getOrElse

println(SpecificArray.flatMap({case (k,v) => globalMap.getOrElse(k, Array()).map(s => (k,v,s))}).toList)

更新

如果 sum 实际上是 count,并且它适用于整个“联接”数据,而不是 SpecificArray 中的每个键,则可以使用 take 而不是它。代码将如下所示:

val joined = SpecificArray2.flatMap({case (k,v) => globalMap.getOrElse(k, Array()).map(s => (s,v))})
        .take(100) // use take instead of sum

然后,您可以以任何您想要的方式使用加入。更新的演示将 v1 构建为形式 v1 = String_of_GlobalArray “ = ” 的连接字符串 2nd_Int_of_SpecificArray就在这里。这个想法是使用mkString而不是显式变量更新。

辛健
2023-03-14

笔记需要更多优化

将GlobalArray转换为< code>Map以加快查找速度。

val GlobalMap = GlobalArray.toMap

SpecificArray.flatMap(x => GlobalMap(x._1))
.foldLeft(0)((sum:Int, s:String) => {
    if(sum<=100) {
    // update v1
    // some calculation
    }
    sum+1
})

如果不是 GlobalMap 中存在 SpecificArray 的所有键,请使用 GlobalMap.getOrElse(x._1, Array())

邹宏峻
2023-03-14

下面这样的怎么样,我更喜欢for理解代码,它有更好的易读性。

var sum:Int = 0
var result:String = ""
for {
  (k1,v1) <- SpecificArray //v1 is the second int from specific array
  (k2,values) <- GlobalArray if k1 == k2  //values is the second array from global array
  value  <- values if sum < 100  //value is one value frome the values
   _ = {sum+=1; result += s"(${v1}=${value})"} //Update something here with the v1 and value
 } yield ()

println(result)
 类似资料:
  • 我想将表单域映射到数据库域。 我有两个数组。。 一个数组是数据,包含作为键的表单字段id和作为值的表单字段值。 我还有一个数组,打算用作地图。此数组的键与表单字段相同,值为数据库字段名。 我想做的是遍历数据数组,在数据键与映射键匹配的地方,给数据数组分配一个新的键,这个键就是映射数组的值。 我的问题是怎么做?我尝试了很多不同的方法,现在我完全迷失在其中。

  • 我有两个多维数组,我想通过使用其中一个数组的值和另一个数组的键来组合它们。数组如下: 阵列1: 阵列 2: 我想生成的结果数组如下: 有没有一个PHP函数可以用来完成这个任务?

  • 问题内容: 我有两个NumPy数组,例如: 和一个过滤器数组,例如: 我如何才能得到一个新的numpy数组,其中仅包含其中相同索引为True的值?就我而言:。 根据公认的解决方案(具有不同的值): 问题答案: NumPy支持布尔索引 假设 和是NumPy数组而不是Python列表(如问题所示)。您可以使用进行转换。

  • 问题内容: 最近有人要求我为一份工作编写3个测试程序。它们将仅使用核心Java API和我选择的任何测试框架来编写。应在适当的地方实施单元测试。 尽管我根本没有收到任何反馈,但我想他们不喜欢我的解决方案(否则我会收到他们的来信),所以我决定在这里展示我的程序,并询问这种实现是否可以认为是好的,并且,如果没有,那为什么呢? 为避免混淆,我现在只问第一个。 实现一个函数,以在另一个更大的数组中查找一个

  • 问题内容: 我想为数组中的每个值返回一个布尔值,指示它是否在array中。我猜这应该是一个标准程序,但是我找不到有关如何执行此操作的任何信息。我的尝试如下: 但是,我得到了错误: 我使用的是numpy,因此首选使用numpy或标准Python的解决方案。 问题答案: 我相信您可以使用-

  • 问题内容: 假设您有两个数组: 您如何将数组a设置为数组b并使它们保持不同的对象?就像我想到的那样: 但这不起作用,因为它仅使“ a”引用数组b。因此,设置两个数组相等,同时保持它们独立的对象,以遍历一个数组的每个元素并将其设置为另一个数组的唯一方法是吗? 那ArrayList呢?当其中有对象时,如何将一个ArrayList设置为等于另一个? 问题答案: 您可能要使用: 或使用