1
我正在尋找一種方法來處理一個任何數組或序列,並在可能的情況下迭代它。Scala:如何處理任何像Array或Seq?
目前我有一些代碼,看起來像這樣,採取Any的序列,並展平包含任何Traversable或Array對象。
感覺就像mustr是一個簡單的方法在Scala中完成這項工作,給定了隱式轉換和什麼。任何人?
我正在尋找一種方法來處理一個任何數組或序列,並在可能的情況下迭代它。Scala:如何處理任何像Array或Seq?
目前我有一些代碼,看起來像這樣,採取Any的序列,並展平包含任何Traversable或Array對象。
感覺就像mustr是一個簡單的方法在Scala中完成這項工作,給定了隱式轉換和什麼。任何人?
基本上你想強制每個元素到Seq
,然後將它們一次全部壓扁。 Array
具有隱式轉換爲Seq
,並且Seq
和Traversable
都具有.toSeq
方法。因此,我們可以這樣做:
val t: Traversable[Int] = List(1, 2, 3)
val a: Array[Int] = Array(4, 5, 6)
val other = "whatever"
val as: Seq[Any] = List(t, a, other)
as.flatMap{
case t: Traversable[_] => t.toSeq
case a: Array[_] => a.toSeq
case other => Seq(other)
}.map{_.toString}
//Seq[java.lang.String] = List(1, 2, 3, 4, 5, 6, whatever)
(順便說一句,這是很醜陋的Scala代碼,你可能要考慮重構事情擺脫首先使用Seq[Any]
的)
或者等價地: 'as.flatMap {...} .map(_。toString)'。 – 2012-07-05 17:58:44
更清潔,謝謝。我真正想要的是一種將Traversable和Array案例合併爲一個的方法。看起來像陣列到Seq的隱式轉換應該允許你以某種方式做到這一點。 – 2012-07-05 18:37:58
我同意Seq [Any]不理想。這一切都源於Play 2的WS框架,它將查詢參數表示爲Map [String,String]。隨後我想支持多值參數,所以我的代碼實際上有一個Map [String,Any]。 – 2012-07-05 19:10:15