Ordering.by(u.toLowerCase)如何在Scala的树映射中进行不区分大小写的查找?

Ordering.by(u.toLowerCase)如何在Scala的树映射中进行不区分大小写的查找?,scala,treemap,Scala,Treemap,因此,我必须实现一个不区分大小写的地图查找,并使用树形图来实现这一点: val treeMap = TreeMap(someOtherMap.toArray: _*)(Ordering.by(_.toLowerCase)) 和treeMap.getFOo和treeMap.getFOo返回与预期相同的结果。我的问题是,Ordering.by..toLowerCase附加参数如何帮助get?我看了一下,它是RB.getkey 额外的Ordering.by在不区分大小写的查找中有什么帮助?它是否接受

因此,我必须实现一个不区分大小写的地图查找,并使用树形图来实现这一点:

val treeMap = TreeMap(someOtherMap.toArray: _*)(Ordering.by(_.toLowerCase))
和treeMap.getFOo和treeMap.getFOo返回与预期相同的结果。我的问题是,Ordering.by..toLowerCase附加参数如何帮助get?我看了一下,它是RB.getkey

额外的Ordering.by在不区分大小写的查找中有什么帮助?它是否接受查找键,转换为小写,并在映射中以小写形式查找键,然后匹配并返回值?非常天真的解释,我知道,但我似乎无法解释其他情况


Scala新手,因此尝试理解这里的内部工作:

如果您深入研究RB.getkey,这是一个数据结构的实现,您将在Scala.collection.immutable.RedBlackTreelookup方法中看到以下代码

@泰勒克 def lookup[A,B]树:树[A,B],x:Aimplicit排序:排序[A]:树[A,B]=如果树eq为null,则为null,否则为null{ val cmp=ordering.comparex,tree.key 如果cmp<0 lookuptree.left,x 否则,如果cmp>0 lookuptree.right,x 埃尔斯树 } 它使用排序来查看key tree.key是否大于或小于提供的x key。在您的情况下,ordering.compare在比较foo和foo时将返回0,因为u2;.toLowerCase将匹配树中的当前节点,最后一个else树将返回与键foo关联的值