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

时间:2018-05-21 00:32:11

标签: arrays scala

我有两个数组:

GlobalArray: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)

我知道使用.map()我可以浏览SpecificArray的每个位置,但到目前为止,我能够做到这一点:

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

3 个答案:

答案 0 :(得分:1)

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

然后你可以以任何你想要的方式使用joined。构建v1的已更新演示版已为v1 += String_of_GlobalArray + " = " + 2nd_Int_of_SpecificArray的联接字符串here。我们的想法是使用mkString而不是显式变量更新。

答案 1 :(得分:1)

注意需要更多优化

将GlobalArray转换为Venue: NYIT Auditorium on Broadway 1871 Broadway New York, NY 10023 212.613.5536 以加快查找速度。

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 }) 中不存在SpecificArray的所有键,则使用GlobalMap

答案 2 :(得分:1)

如下所示,我更喜欢componentWillMount() { let user = firebase.auth().currentUser; if (user != null) { this.props.navigation.navigate('Drawer'); } this.unsubscribe = firebase.auth().onAuthStateChanged(user => { if (user) { this.props.navigation.navigate('Drawer'); } }); } 具有更好可读性的理解码。

for