此代码来自Scala工作表:
case class E(a: Int, b: String)
val l = List(
E(1, "One"),
E(1, "Another One"),
E(2, "Two"),
E(2, "Another Two"),
E(3, "Three")
)
l.groupBy(x => x.a)
// res11: scala.collection.immutable.Map[Int,List[com.dci.ScratchPatch.E]] =
// Map(
// 2 -> List(E(2,Two), E(2,Another Two)),
// 1 -> List(E(1,One), E(1,Another One)),
// 3 -> List(E(3,Three))
// )
Run Code Online (Sandbox Code Playgroud)
您会注意到groupBy返回一个映射,但是元素的排序现在与之前的顺序不同.知道为什么会这样,最好的方法是避免这种情况吗?
ListSet(collection.immutable.ListSet)是一个反向排序集.我需要订购套装.这是原始ListSet的一个示例:
var a = ListSet(1,2,3)
var ite = a.iterator
ite.next // returns 3
ite.next // returns 2
ite.next // returns 1
Run Code Online (Sandbox Code Playgroud)
这是我需要的一个例子:
var a = ListSet(1,2,3)
var ite = a.iterator
ite.next // returns 1
ite.next // returns 2
ite.next // returns 3
Run Code Online (Sandbox Code Playgroud)
更新:
"订购"是我的"插入订单".我需要这个:
var a = ListSet(1,2,3)
a += 5
a += 4
var ite = a.iterator
ite.next // returns 1
ite.next // returns 2
ite.next // returns 3
ite.next // returns 5
ite.next // returns 4
Run Code Online (Sandbox Code Playgroud) 给定
val xs1 = Set(3, 2, 1, 4, 5, 6, 7)
val ys1 = Set(7, 2, 1, 4, 5, 6, 3)
Run Code Online (Sandbox Code Playgroud)
xs1而ys1这两个结果scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 7, 3, 4)
但较小的波纹管
val xt1 = Set(1, 2, 3)
val yt1 = Set(3, 2, 1)
Run Code Online (Sandbox Code Playgroud)
生产
xt1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
yt1: scala.collection.immutable.Set[Int] = Set(3, 2, 1)
Run Code Online (Sandbox Code Playgroud)
为什么不订购前者而订购后者似乎呢?
我正在查看 scala 的一个集合示例,我注意到当创建 states3 时,编译器更改了该集合成员的顺序,怀俄明州排在第三位,现在是最后一个。有人可以解释为什么会发生这种情况吗?
scala> val states = Set("Alabama", "Alaska", "Wyoming")
states: scala.collection.immutable.Set[String] = Set(Alabama, Alaska, Wyoming)
scala> val states2 = states + "Virginia"
states2: scala.collection.immutable.Set[String] =
Set(Alabama, Alaska, Wyoming, Virginia)
scala> val states3 = states2 + ("New York", "Illinois")
states3: scala.collection.immutable.Set[String] =
Set(Alaska, Virginia, Alabama, New York, Illinois, Wyoming)
Run Code Online (Sandbox Code Playgroud)
从编程 Scala 中获取的示例:可扩展性 = 函数式编程 + 对象 by Dean Wampler
以下是一些改编自在线Scala教程的代码:
object Test {
def main(args: Array[String]) {
val fruit1 = List("apples", "oranges", "pears")
val fruit2 = List("mangoes", "banana")
val veg1 = Set("potatoes", "carrots", "peas")
val veg2 = Set("cabbage", "squash")
var fruit = fruit1 ++ fruit2
println( "fruit1 ++ fruit2 : " + fruit )
var vegetable = veg1 ++ veg2
println( "veg1 ++ veg2 : " + vegetable )
}
}
Run Code Online (Sandbox Code Playgroud)
以下是结果:
fruit1 ++ fruit2:列表(苹果,橘子,梨,芒果,香蕉)
veg1 ++ veg2:套装(卷心菜,豌豆,南瓜,胡萝卜,土豆)
List连接按照我的预期工作,但我永远不会预测Set连接的结果顺序.任何人都可以解释结果是如何得出的?这里的在线教程没什么帮助.
鉴于:
Seq(1,2,3) map {
case 1 => 11
case 2 => Seq(12,13,14)
case 3 => 15
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能优雅地将其展平为Seq[Int]含有Seq(11,12,13,14,15)?