Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ties处理scala数组组_Scala - Fatal编程技术网

使用ties处理scala数组组

使用ties处理scala数组组,scala,Scala,我有一系列的名字。我需要按元素分组并选择计数最高的名称。如果有联系,请按字母顺序返回姓氏。到目前为止,我有以下资料: val names = Array("Adam", "Eve", "Adam", "Eve", "John", "Doe") val countNames = names.map(x => (x, names.count(_ == x))).toSeq.sortBy(_._2) 我的成绩应该是夏娃。如何获取该值?您可以使用(Int,String)元组的自然顺序,并获取最后

我有一系列的名字。我需要按元素分组并选择计数最高的名称。如果有联系,请按字母顺序返回姓氏。到目前为止,我有以下资料:

val names = Array("Adam", "Eve", "Adam", "Eve", "John", "Doe")
val countNames = names.map(x => (x, names.count(_ == x))).toSeq.sortBy(_._2)

我的成绩应该是夏娃。如何获取该值?

您可以使用
(Int,String)
元组的自然顺序,并获取最后一个元素:

 countNames.sortWith( (x,y) =>
                       (x._2 > y._2) ||
                       (x._2 == y._2 && x._1 > y._1)  )(0)._2
这将像预期的那样工作,因为这种排序将把最高计数放在最后,在具有相同计数的元组中,将按字母顺序排序,再次将“较高”的字母顺序值放在最后

p、 s.也可以使用
groupBy
进行分组:

names.groupBy(identity) // Map(Adam -> Array(Adam, Adam), Doe -> Array(Doe), Eve -> Array(Eve, Eve), John -> Array(John))
  .mapValues(_.length)  // Map(Adam -> 2, Doe -> 1, Eve -> 2, John -> 1)
  .toSeq.map(_.swap)    // ArrayBuffer((2,Adam), (1,Doe), (2,Eve), (1,John))
  .sorted               // ArrayBuffer((1,Doe), (1,John), (2,Adam), (2,Eve))
  .last._2              // Eve

您可以使用
(Int,String)
元组的自然顺序,并获取最后一个元素:

 countNames.sortWith( (x,y) =>
                       (x._2 > y._2) ||
                       (x._2 == y._2 && x._1 > y._1)  )(0)._2
这将像预期的那样工作,因为这种排序将把最高计数放在最后,在具有相同计数的元组中,将按字母顺序排序,再次将“较高”的字母顺序值放在最后

p、 s.也可以使用
groupBy
进行分组:

names.groupBy(identity) // Map(Adam -> Array(Adam, Adam), Doe -> Array(Doe), Eve -> Array(Eve, Eve), John -> Array(John))
  .mapValues(_.length)  // Map(Adam -> 2, Doe -> 1, Eve -> 2, John -> 1)
  .toSeq.map(_.swap)    // ArrayBuffer((2,Adam), (1,Doe), (2,Eve), (1,John))
  .sorted               // ArrayBuffer((1,Doe), (1,John), (2,Adam), (2,Eve))
  .last._2              // Eve

定义字典顺序,其中计数优先于字符串。然后使用它对列表进行排序并选择第一个元素:

 countNames.sortWith( (x,y) =>
                       (x._2 > y._2) ||
                       (x._2 == y._2 && x._1 > y._1)  )(0)._2

定义字典顺序,其中计数优先于字符串。然后使用它对列表进行排序并选择第一个元素:

 countNames.sortWith( (x,y) =>
                       (x._2 > y._2) ||
                       (x._2 == y._2 && x._1 > y._1)  )(0)._2

我喜欢你的第一种方法。我不知道“排序”对元组的两个元素都排序。请使用
max
而不是
sorted。最后一个
。我喜欢您的第一种方法。我不知道“排序”对元组的两个元素都排序。请使用
max
而不是
sorted.last