Scala 新手。我有 List[Array[Int]] 形式的資料,每個 Array[Int] 有 n 個整數,稱之為 a。還有兩個Array[int],分別叫c和d,長度也是n。我想將 a 的每一行的每個元素與 c 和 d 的相應元素(即相同索引)進行比較,并回傳與 c 或 d 匹配的那些行。
這里沒有任何利害關系,只是自學 Scala。
uj5u.com熱心網友回復:
例子比解釋更好(不要描述,演示)所以很難知道這是否是你所得到的。
val data = List(Array( 2, 4, 6) // a
,Array(11,44, 6) // c
,Array(12, 4,66)) // d
data.transpose
.flatMap(grp => grp.tail.find(_ == grp.head))
//res0: List[Int] = List(4, 6)
這有點危險,因為所有陣列都必須非空且長度相同。
uj5u.com熱心網友回復:
假設這個起點:
val c = Array(1,2,3)
val d = Array(0,1,2)
val target: List[Array[Int]] = List(c,d)
val as: List[Array[Int]] =
List(
Array(0,1,2),
Array(1,2,3),
Array(2,3,4),
Array(4,5,6),
)
以下是如何僅從as該匹配項中獲取陣列c或d:
as
.filter(a => a.sameElements(c) || a.sameElements(d))
//and a bit more generic if you have a big target pool
as
.filter(a => target.exists(_.sameElements(a)))
此解決方案對as.
uj5u.com熱心網友回復:
解決這個問題有不同的方法,一種可能的方法是使用 .zip
例如:
val a = List(Array(1,1,1), Array(2,2,2), Array(3,3,3))
val c = Array(2,2,2)
val res = a.map(arr => arr.zip(c))
進入 res 你會得到類似的東西
/*
List[Array[Tuple2[Int, Int]]] = List(
Array((1, 2), (1, 2), (1, 2)),
Array((2, 2), (2, 2), (2, 2)),
Array((3, 2), (3, 2), (3, 2))
)
*
使用這種結構很容易比較每個元素,例如
res.map(arr => arr.map(e => e._1 == e._2))
/*
res1: List[Array[Boolean]] = List(
Array(false, false, false),
Array(true, true, true),
Array(false, false, false)
)
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/376198.html
