首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Scala -基于元组值对地图进行排序

Scala -基于元组值对地图进行排序
EN

Stack Overflow用户
提问于 2014-10-18 15:08:43
回答 3查看 1.5K关注 0票数 1

我试图根据值元组对地图进行排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val data = Map("ip-11-254-25-225:9000"  -> (1, 1413669308124L), 
               "ip-11-232-145-172:9000" -> (0, 1413669141265L), 
               "ip-11-232-132-31:9000"  -> (0, 1413669128111L), 
               "ip-11-253-67-184:9000"  -> (0, 1413669134073L), 
               "ip-11-232-142-77:9000"  -> (0, 1413669139043L))

排序的标准应该基于元组中的两个值。

我试过了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SortedMap[String, (Long,Long)]() ++ data

但没有成功。

有谁能建议一种更好的方法来先在tuple._1上排序,然后在tuple._2上排序

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-18 22:29:31

通常,您可以选择元组中的哪个元素在排序中具有优先级。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data.toSeq.sortBy {case (k,(a,b)) => (k,a,b) }

case模式中,我们提取(嵌套)元组的每个元素。在上面的表达式中,我们按键排序,然后按值元组中的第一个元素排序,然后再按第二个元素排序。另一方面,这个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data.toSeq.sortBy {case (k,(a,b)) => (k,b) }

将按值元组中的键和最后一个元素进行排序,下面是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data.toSeq.sortBy {case (k,(a,b)) => (a,b) }

根据地图的值;这个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data.toSeq.sortBy {case (k,(a,b)) => (b) }

将根据值元组中的最后一个元素进行排序。

正如@Paul 所指出的那样,Map没有保留任何排序,因此结果仍然是一个序列。

票数 3
EN

Stack Overflow用户

发布于 2014-10-18 21:33:03

这就是你要找的吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data.toVector.sortBy(_._2)

这将根据值(元组)对条目进行排序,其中顺序依赖于两个元组参数。元组的默认排序行为是在_1上排序,然后在_2上排序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vector((2,1), (1,2), (1,3), (1,1)).sorted
// Vector((1,1), (1,2), (1,3), (2,1))
票数 1
EN

Stack Overflow用户

发布于 2014-10-19 09:57:08

分类元组

首先要注意的是,如果您对一个元组集合进行排序,您将得到与预期相同的结果,即首先比较第一项,然后再比较第二项。

例如,(a1, b1) > (a2, b2)当且仅当(a1 > a2) || ((a1 == a2) && (b1 > b2))

因此,为了在元组排序方面获得预期的结果,您不需要做任何事情。

然后讨论如何根据值对map进行排序,以及如何在排序后保持顺序。

对值排序map

您可以使用sortBy方法的List,然后使用有序的数据结构来保持排序,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new scala.collection.immutable.ListMap() ++ data.toList.sortBy(_._2)

如果在Scala中运行此操作,您将得到后续的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scala> new scala.collection.immutable.ListMap() ++ data.toList.sortBy(_._2)
res3: scala.collection.immutable.ListMap[String,(Int, Long)] = Map(ip-11-232-132-31:9000 -> (0,1413669128111), ip-11-253-67-184:9000 -> (0,1413669134073), ip-11-232-142-77:9000 -> (0,1413669139043), ip-11-232-145-172:9000 -> (0,1413669141265), ip-11-254-25-225:9000 -> (1,1413669308124))

如果您只想对它们进行排序并遍历结果(也就是说,如果不需要map作为结果),那么甚至不需要使用ListMap

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26445478

复制
相关文章
如何对Scala中集合(Collections)进行排序
文章标题: 《如何对Scala中集合(Collections)进行排序》 本文链接: http://www.iteblog.com/archives/1171 下面是一系列对 Scala 中的Lists、Array进行排序的例子,数据结构的定义如下: // data structures working with val s = List( "a", "d", "F", "B", "e") val n = List(3, 7, 2, 1, 5) val m = Map( -2 -> 5,
Albert陈凯
2018/04/04
1.8K0
scala(十七) 元组(tuple)
似乎还有swap函数用于元组元素交换;但是在我这个版本(2.12.10)没有看到。
用户1483438
2022/04/20
3170
6.scala元组
Scala 中的元组包含一系列类:Tuple2,Tuple3等,直到 Tuple22。因此,当我们创建一个包含 n 个元素(n 位于 2 和 22 之间)的元组时,Scala 基本上就是从上述的一组类中实例化 一个相对应的类,使用组成元素的类型进行参数化。上例中,ingredient 的类型为 Tuple2[String, Int]。
Spark学习技巧
2020/05/04
7790
python对字典进行排序
标准的python字典是无序的。即使对(键、值)对进行了排序,也无法以保留排序的方式将它们存储在dict中。
IT工作者
2022/07/07
1.9K0
Delphi对TStrings进行排序
最近在做一个Delphi的对接第三方支付的接口,接口签名机制模仿微信的签名方式,把参数按ascii码进行排序后再加上key进行md5的加密,因为调用接口的的Post里面的参数是TStrings类型的,但是在TStrings类型里面没有Sorted排序这个方法。所以我自己重写了一个函数用于处理这个。
Vaccae
2019/07/25
1.4K0
scala快速入门系列【元组】
本篇作为scala快速入门系列的第十二篇博客,为大家带来的关于元组的相关内容。
大数据梦想家
2021/01/26
2100
scala快速入门系列【元组】
对map集合进行排序
今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序。
java思维导图
2018/11/30
1.8K0
对map集合进行排序
LUA对Map进行排序
Lua中最常见的数据结构就是Table, 用Table表示Map很容易, 但早期Lua没有提供一个针对Map数据结构的排序方法,下面用Moonscript实现了一个Map型数据结构排序函数方法。
糖果
2019/11/20
3.4K0
CamMap:基于SLAM地图对不共视相机进行外参标定
文章:CamMap: Extrinsic Calibration of Non-Overlapping Cameras Based on SLAM Map Alignment
点云PCL博主
2023/08/21
7410
CamMap:基于SLAM地图对不共视相机进行外参标定
如何根据函数返回的值对dart中的List进行排序
# 关于排序:如何根据函数返回的值对dart中的List进行排序 void main(){ List<POJO> pojo = [POJO(5), POJO(3),POJO(7),POJO(1)]; // fill list pojo..sort((a, b) => a.id.compareTo(b.id)); for(var i in pojo){ print(i.id); // prints list in sorted order i.e 1 3 5 7 } }
徐建国
2021/08/26
11.6K0
C++ 对vector进行排序
title: C++ vector排序 tags: c++,vector,排序 grammar_cjkRuby: true --- 每次都要重复造轮子真的很累,所以用别人的吧。 目的:对vector进行排序 示例: 记得将 algorithm 这个头文件包括进去 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(void) { vector <int> a
marsggbo
2018/01/23
8.5K0
使用QCollat​​or对QStringList进行排序
  QCollator类根据排序规则算法比较字符串。以下例子是对QStringList进行数字优先且区分大小写比较排序。
Qt君
2023/03/17
2.9K0
使用QCollat​​or对QStringList进行排序
Python中对list进行排序
很多时候,我们需要对List进行排序,Python提供了两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序 方法2.用built-in函数sorted进行排序(从2.4开始) 这两种方法使用起来差不多,以第一种为例进行讲解: 从Python2.4开始,sort方法有了三个可选的参数,Python Library Reference里是这样描述的 cmp:cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument: "cmp=lambda x,y: cmp(x.lower(), y.lower())" key:key specifies a function of one argument that is used to extract a comparison key from each list element: "key=str.lower" reverse:reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.In general, the key and reverse conversion processes are much faster than specifying an equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once. 以下是sort的具体实例。 实例1: >>>L = [2,3,1,4] >>>L.sort() >>>L >>>[1,2,3,4] 实例2: >>>L = [2,3,1,4] >>>L.sort(reverse=True) >>>L >>>[4,3,2,1] 实例3: >>>L = [('b',2),('a',1),('c',3),('d',4)] >>>L.sort(cmp=lambda x,y:cmp(x[1],y[1])) >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)] 实例4: >>>L = [('b',2),('a',1),('c',3),('d',4)] >>>L.sort(key=lambda x:x[1]) >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)] 实例5: >>>L = [('b',2),('a',1),('c',3),('d',4)] >>>import operator >>>L.sort(key=operator.itemgetter(1)) >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)] 实例6:(DSU方法:Decorate-Sort-Undercorate) >>>L = [('b',2),('a',1),('c',3),('d',4)] >>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort >>>A.sort() >>>L = [s[2] for s in A] >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)] 以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List item中的某一项 为比较关键字进行排序. 效率比较: cmp < DSU < key 通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当 多关键字比较排序: 实例7: >>>L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=lambda x:x[1]) >>> L >>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)] 我们看到,此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用
py3study
2020/01/09
2.4K0
如何使用Java8 Stream API对Map按键或值进行排序
在这篇文章中,您将学习如何使用Java对Map进行排序。前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题。所以我决定写这样一篇文章。在Java中,有多种方法可以对Map进行排序,但是我们将重点介绍Java 8 Stream,这是实现目标的一种非常优雅的方法。
字母哥博客
2020/09/23
7.2K0
如何使用Java8 Stream API对Map按键或值进行排序
python 元组列表排序
data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
用户5760343
2019/07/07
1.1K0
Apache Flink利用Maven对Scala与Java进行混编
主要是因为作者在使用IDEA,maven做Flink开发的时候出现的问题。Flink作业在提交到生产环境集群的时候不要把Flink相关源码等打入jar包中,因为这样可能会出现当生产版本与开发版本不同的时候就会出现冲突。
CainGao
2020/04/14
2.3K0
在Scala里面如何使用元组
元组在Scala语言中是一种十分重要的数据结构,类似数据库里面的一行记录(row),它可以将不同类型的值组合成一个对象,在实际应用中十分广泛。 先来看一个简单的tuple定义: 上面的第二种例子中,可
我是攻城师
2018/05/14
8140
147. 对链表进行插入排序
插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。
张伦聪zhangluncong
2022/10/26
6350
点击加载更多

相似问题

如何按值按升序对Scala地图进行排序?

14

对键、值对的元组进行排序

236

按键、值(元组)对字典进行排序

22

用元组对元组进行排序,在所有键中对元组进行排序。

26

Python -按元组值对元组键字典进行排序

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文