2017-12-02 3 views
0

folgende Datenstruktur Gegeben:Zeitbereich-Hash-Funktion

[{ 
    start: 10.2, 
    end: 15.3, 
    text: 'Lorem Ipsum....' 
}, { 
    start: 16.3, 
    end: 20.5, 
    text: 'dolor sit...' 
}, { 
    start: 19.4, 
    end: 25.1, 
    text: 'consectetur adipiscing elit' 
}] 

ich brauche den aktiven Text für eine bestimmte Zeit, um herauszufinden (z.B. 18, das maches Element 2 und 3). Ich habe bereits eine Find-Methode implementiert, die überprüft, ob die angegebene Zeit größer als der Anfang und kleiner als das Ende ist. Leider ist das bei etwa 25.000 Einträgen nicht so effizient. Ich suche daher nach einer Hashmap-Implementierung, die Anfang und Ende als Schlüssel berechnet und für eine bestimmte Zeit die übereinstimmenden Einträge zurückgibt.

+0

hast du versucht Prädikat-Methode –

+0

ist die Daten sortiert? Wenn ja, hast du eine binäre Suche versucht? –

+0

@NinaScholz Ja, die Daten können einmalig nach Start oder Ende auf Anwendungs-Init sortiert werden. Werde einen Blick auf die binäre Suche werfen. – zusatzstoff

Antwort

0

es wird Ihnen hilfreich, um die Daten zu filtern

var arr=[{ 
 
    start: 10.2, 
 
    end: 15.3, 
 
    text: 'Lorem Ipsum....' 
 
}, { 
 
    start: 16.3, 
 
    end: 20.5, 
 
    text: 'dolor sit...' 
 
}, { 
 
    start: 19.4, 
 
    end: 25.1, 
 
    text: 'consectetur adipiscing elit' 
 
}] 
 

 
var condition=(arr)=>(arr.start>=18); 
 

 
var arr_1=arr.filter(condition); 
 
console.log(arr_1);

0

Bei sortierten Daten werden Sie eine binary seach nehmen konnte, wo der Start in der Mitte der Liste ist, und wenn das gewünschte Datum ist kleiner, nehmen Sie die Mitte von Anfang und Mitte oder die mittleren Werte von der anderen Seite. Fahren Sie fort, bis der Artikel gefunden wurde.


Für unsortierte Daten, könnten Sie das Jahr als Teil der Raute-Taste nehmen und die Wochennummer für jedes Ereignis in der Liste.

Wenn ein Ereignis in einer anderen Woche endet, fügen Sie alle Referenzen des Ereignisses in der Hashtabelle mit allen Wochen hinzu, in denen es stattfindet.

Für eine Suche, berechnen Sie einfach die Wochennummer und nehmen Sie eine genaue Suche nach den gegebenen Wochendaten.

Anstatt der Woche könnten Sie eine kürzere Strecke, wie einen Tag oder eine größere Entfernung, wie die erste Hälfte des Monats oder die letzte Hälfte des Monats nehmen (dies wäre einfacher zu berechnen als eine Woche).