题解 | #合并表记录#

合并表记录

https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    var myMap = new Map();
    while(line = await readline()){
        let tokens =line.split(' ');
        if(tokens.length === 2){//第一个输入的是键值对的数量,之后长度为2的数组才是键值对
            let k = parseInt(tokens[0]);
            let v = parseInt(tokens[1]);//传入的数组的值是字符,转为数字
            if(myMap.has(k)){
                v += myMap.get(k);
                myMap.set(k, v);//如果myMap中含有当前的键,将相加之后的值作为这个键的新值
            }
            else{
                myMap.set(k, v);//如果myMap中没有当前的键,将键值对添加进myMap
            }
        }
    }
    let nMap = new Map([...myMap].sort(function(a,b){//将一个数组直接创建为一个新的map
        return a[0] - b[0];
    }))//对myMap进行升序排列
    nMap.forEach(function(val, key){
        console.log(key + " " + val)
    }, myMap);//输出nMap的键和值

}()

我的方法

map对象添加键值对需要用.set

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    var myMap = new Map();
    while(line = await readline()){
        let tokens =line.split(' ');
        if(tokens.length === 2){//第一个输入的是键值对的数量,之后长度为2的数组才是键值对
            let k = parseInt(tokens[0]);
            let v = parseInt(tokens[1]);//传入的数组的值是字符,转为数字
            if(myMap.has(k)){
                v += myMap.get(k);
                myMap.set(k, v);//如果myMap中含有当前的键,将相加之后的值作为这个键的新值
            }
            else{
                myMap.set(k, v);//如果myMap中没有当前的键,将键值对添加进myMap
            }
        }
    }
    let nMap = new Map([...myMap].sort(function(a,b){
        return a[0] - b[0];
    }))//对myMap进行升序排列
    nMap.forEach(function(val, key){
        console.log(key + " " + val)
    }, myMap);//输出nMap的键和值

}()

小牛很六——的方法

用的是对象的方法,对象中的键也是唯一的

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    let arr = [];
    void (async function () {
        // Write your code here
        while ((line = await readline())) {
            arr.push(line);
            const length = parseInt(arr[0]);
            if (arr.length === length + 1) {
                arr = arr.slice(1);
                arr = arr.map((it) => it.split(" "));
                arr.sort((a, b) => a[0] - b[0]);
                let obj = {};
                arr.forEach((it) => {
                    if (!obj[it[0]]) {
                        obj[it[0]] = Number(it[1]);
                    } else {
                        obj[it[0]] += Number(it[1]);
                    }
                });
                Object.keys(obj).forEach((it) => {
                    let a = [];
                    a.push(it, obj[it]);
                    console.log(a.join(" "));
                });
            }
        }
    })();
})();

sky077——的方法

.map()方法是对arr中的每一项都进行函数处理并返回这个新数组,不会对原数组造成影响。所以需要用数组接收。

练练练练练 文章被收录于专栏

练练练练练

全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务