【发布时间】:2020-11-23 22:07:22
【问题描述】:
我正在尝试解决日志文件中的数据重新排序算法。
您有一组日志。每个日志都是一个以空格分隔的字符串。
对于每个日志,每个日志中的第一个单词是一个字母数字标识符。然后,要么:
标识符后面的每个单词将仅由小写字母组成,或者; 标识符后面的每个单词将仅包含数字。 我们将这两种日志称为字母日志和数字日志。保证每条日志的标识符后至少有一个单词。
重新排序日志,使所有字母日志都排在任何数字日志之前。字母日志按字典顺序排序,忽略标识符,标识符用于平局。数字日志应按其原始顺序放置。
返回日志的最终顺序。
例子:
Input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
Output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
我的想法是为数字制作一张地图,为字母制作一张地图。我已经做了。然后,我需要对数字和字母进行排序,并将所有排序后的字母添加到我的答案数组中,并将所有排序后的数字添加到我的答案数组中。
var reorderLogFiles = function(logs) {
if(!logs || logs.length === 0)
return [];
let numbers = {
'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6,
'7': 7, '8': 8, '9': 9
};
let digits = new Map();
let letters = new Map();
for(let i=0; i<logs.length; i++) {
const log = logs[i].split(" ");
if(numbers[log[1]] !== undefined)
digits.set(log[0], log.splice(1, log.length));
else
letters.set(log[0], log.splice(1, log.length));
}
// How can I sort letter and digits?
let ans = [];
for(const [key, value] of sortedLetters) {
const temp = key + " " + value.join(" ");
ans.push(temp);
}
for(const [key, value] of sortedDigits) {
const temp = key + " " + value.join(" ");
ans.push(temp);
}
return ans;
};
【问题讨论】:
标签: javascript sorting dictionary