You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中按元素出现频次对多列表元素进行排序

按元素在多个列表中的出现次数排序

需要把多个列表里的元素,按照它们出现在不同列表中的次数(即被多少个列表包含)降序排序;如果出现次数相同,则按照元素在第一个列表中的出现顺序排列。

输入示例

var list1 = ["a", "b", "c", "d"];
var list2 = ["a", "c"];
var list3 = ["c", "d"];
var list4 = ["d"];

期望输出

["c", "a", "d", "b"]

排序逻辑

  • c出现在3个列表(list1、list2、list3)中,次数最多,排首位;
  • a出现在2个列表(list1、list2)中,排第二位;
  • d同样出现在3个列表(list1、list3、list4)中,但在第一个列表里a的位置比d靠前,所以a排在d之前;
  • b只在list1中出现,次数最少,排末位。

实现步骤

  1. 收集所有唯一元素:把所有列表的元素合并后去重,得到需要排序的全部元素;
  2. 统计出现次数:遍历每个元素,统计它被多少个输入列表包含;
  3. 自定义排序:先按出现次数降序,次数相同时按第一个列表里的元素顺序升序。

JavaScript 实现代码

// 把所有输入列表放到一个数组里,方便统一处理
const inputLists = [
  ["a", "b", "c", "d"],
  ["a", "c"],
  ["c", "d"],
  ["d"]
];

// 1. 获取所有唯一元素
const uniqueElements = [...new Set(inputLists.flat())];

// 2. 统计每个元素出现在多少个列表中
const occurrenceCount = uniqueElements.reduce((countMap, element) => {
  const count = inputLists.filter(list => list.includes(element)).length;
  countMap[element] = count;
  return countMap;
}, {});

// 3. 按规则排序
const firstList = inputLists[0];
const sortedResult = uniqueElements.sort((a, b) => {
  // 优先按出现次数降序
  if (occurrenceCount[b] !== occurrenceCount[a]) {
    return occurrenceCount[b] - occurrenceCount[a];
  }
  // 次数相同时,按第一个列表中的位置排序
  return firstList.indexOf(a) - firstList.indexOf(b);
});

console.log(sortedResult); // 输出: ["c", "a", "d", "b"]

代码说明

  • inputLists.flat()把嵌套列表转成一维数组,再用Set去重得到唯一元素;
  • reduce结合filter统计每个元素的列表出现次数;
  • sort方法自定义排序逻辑,完美匹配需求中的排序规则。

内容的提问来源于stack exchange,提问作者Rustam Usmanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:05:26