Ich verwende eine Karte, um eingehende Anfragen zu erfüllen. Ich möchte diese Anfragen mit ihrem Paar abgleichen, sobald ich sie bekomme. Ordnung ist wichtig, weil es zuerst kommt, zuerst, um zusammenzupassen. Vermeiden von unnötigen Vorgängen ist eine Voraussetzung. Mein Verständnis ist, dass Hash-Maps schneller als Array-Iterationen sind und Maps die Reihenfolge beibehalten. Was ist die beste Implementierung für die Zuordnung von Streaming-Objekten mit wenig oder gar keiner räumlichen oder zeitlichen Komplexität? Die Datenstruktur ist nicht in Stein gemeißelt, sie kann modifiziert und in jedem beliebigen Format optimiert werden, solange die Information nicht verloren geht. Nach meinem Verständnis ist das Beste, was erreicht werden kann, O (n). Ein anderes Problem, mit dem ich beim Hashing konfrontiert bin, ist das Überschreiben von Duplikaten in der Warteschlange. Das habe ich.Ich möchte Anfragen aus einem Stream so schnell wie möglich abgleichen
function* match(items, identity, remaining = new Map()) {
for (let item of items) {
let id = identity(item);
let pair = x =>({type:x.type==="passenger"? "driver": "passenger", direction:x.direction, time:x.time})
let key = item=> item.type + item.direction + item.time;
let candidate = remaining.get(key(pair(id)));
if (candidate) {
remaining.delete(key(pair(id)));
yield [item, candidate];
} else {
remaining.set(key(id), item);
}
}
}
// Example:
let items = [{
type: 'driver',
direction: 'east',
time: '9:15',
name:['Archibald Trump']
},{
type: 'passenger',
direction: 'east',
time: '9:15',
name:['Bacon Eater']
},{
type: 'passenger',
direction: 'east',
time: '9:15',
name:['Banjo Barney']
},{
type: 'passenger',
direction: 'east',
time: '9:15',
name:['Flimsy Stick']
}, {
type: 'passenger',
direction: 'west',
time: '9:30',
name:['Big Red']
},{
type: 'passenger',
direction: 'west',
time: '9:35',
name:['Hathaway Anne']
}];
let remaining = new Map();
let pairs = match(items, item => item, remaining);
console.log('pairs',...pairs);
console.log('remaining',...remaining.values());