排序后如何让两个多维数组(艺术家与歌曲)重新对齐
解决艺术家与歌曲排序后关联丢失的问题
嗨,这个坑我之前也踩过!把艺术家和歌曲拆成两个独立的多维数组,确实很容易在排序后搞丢它们的对应关系——毕竟你俩的关联全靠索引位置撑着,一旦艺术家数组的顺序被打乱,歌曲数组的索引没变,自然就对不上了。
核心思路:把关联数据绑定在一起
与其分开存两个数组,不如把每个艺术家和他对应的3首歌曲打包成一个对象(或结构体,看你用的语言),然后把这些对象放进一个数组里。这样排序的时候,整个对象会一起移动,艺术家和歌曲的关联就永远不会断啦!
举个JavaScript的例子:
原来的拆分写法(容易出问题)
// 拆分的两个数组 const artists = [ { name: "周杰伦" }, { name: "陈奕迅" }, { name: "蔡健雅" }, { name: "林俊杰" } ]; const songs = [ ["晴天", "七里香", "青花瓷"], ["浮夸", "富士山下", "K歌之王"], ["红色高跟鞋", "别找我麻烦", "达尔文"], ["江南", "一千年以后", "小酒窝"] ]; // 排序艺术家数组后,关联断裂 artists.sort((a, b) => a.name.localeCompare(b.name)); // 这时候artists的顺序变了,但songs还是原来的顺序,对应不上了
改进后的绑定写法(关联永不丢)
// 把艺术家和歌曲绑定成一个对象数组 const artistWithSongs = [ { artist: "周杰伦", songs: ["晴天", "七里香", "青花瓷"] }, { artist: "陈奕迅", songs: ["浮夸", "富士山下", "K歌之王"] }, { artist: "蔡健雅", songs: ["红色高跟鞋", "别找我麻烦", "达尔文"] }, { artist: "林俊杰", songs: ["江南", "一千年以后", "小酒窝"] } ]; // 按艺术家名字排序,整个对象一起动,关联完全保留 artistWithSongs.sort((a, b) => a.artist.localeCompare(b.artist)); // 之后要单独提取艺术家或歌曲也很方便 const sortedArtists = artistWithSongs.map(item => item.artist); const sortedSongs = artistWithSongs.map(item => item.songs);
关于Stack Overflow提交代码被拒的小提示
平台提示代码不符合要求,大概率是这几个原因:
- 没有明确标注你用的编程语言(比如开头没说用Java/Python/JS)
- 代码不是最小可复现版本——比如你贴了太多无关代码,或者缺少必要的初始化逻辑
- 代码格式不对:没有用三个反引号(```)包裹代码块,或者缩进混乱
下次提交的时候,先说明你用的语言,然后只贴能复现问题的最少代码,再用代码块正确包裹,应该就能过啦!
内容的提问来源于stack exchange,提问作者Othello
相关产品推荐
相关产品推荐

