Qual è il nome o la descrizione della mia tecnica per filtrare gli elementi nell'array? [chiuso]

0

Ho provato a pubblicare questa domanda su StackOverflow ma mi hanno detto di provarlo qui perché non è così specifico. Mi piacerebbe conoscere il nome dell'algoritmo o della tecnica di implementazione successiva. Mi chiedo se questa cosa sia presente nelle librerie standard di altri linguaggi (la mia implementazione è in Javascript).

Considera una funzione che richiede la raccolta / iterable e l'indice che deve restituire gli elementi che circondano / sono vicini all'indice (compreso l'elemento nell'indice). È possibile specificare anche il numero di articoli restituiti.

Questo è l'output della funzione:

const ary = [3, 4, 5, 7, 8, 20, 21, 23, 600, 120]

// Get item on index and four another items surrounding it
const result = getCollectionAround(ary, 5, 4)

// -> console.log(result)
[7, 8, 20, 21, 23]

Il trucco è di restituire gli elementi da questa funzione anche se l'indice è l'ultimo / primo (il che significa ottenere l'elemento nell'ultimo indice e quattro prima di esso). Dovresti sempre recuperare la quantità corretta di elementi anche se stai colpendo l'inizio / la fine dell'array (questo significa che devi recuperarlo aggiungendo o anteponendo altri elementi).

Questa è l'implementazione

getCollectionAround(collection, referenceIndex, amount) {
    const totalCount = collection.length
    const requestedCount = Math.floor(totalCount * amount)

    let startIndex = Math.max(0, Math.round(referenceIndex - (requestedCount / 2)))
    if (startIndex + requestedCount > collection.length) {
      startIndex = Math.max(0, collection.length - requestedCount - 1)
    }

    // NOTE: + 1 include last index
    return collection.slice(startIndex, startIndex + 1 + requestedCount)
  }

Grazie per eventuali lead. Il motivo per cui lo chiedo è perché potrei usarlo molto e preferirei usare una libreria leggera JS (o almeno un modulo da esso) che farebbe questo per me o forse creare il mio pacchetto per esso se non ce n'è.

    
posta user3056783 03.11.2017 - 11:35
fonte

1 risposta

2

Penso che ciò a cui ti riferisci sia " ricerca di prossimità ".

Questa è una questione soggettiva, ma come hai scritto il processo con le tue regole quando vengono restituiti 5 elementi, provi a mantenere l'indice nel mezzo. Potrebbe essere necessario cercare gli elementi totali nella raccolta e / o il numero di vicini che ha.

Qualcuno può dire che quando hanno chiamato questo metodo GetCollectionAround per il primo indice si aspetterebbero solo 3 output 3,4,5 e restituirai 3,4,5,7,8. Nel tuo esempio hai dato 4 come importo che, come comprendo, significa l'importo da restituire più l'elemento indicizzato. Dalla chiamata alla funzione sembra che il tuo elemento di ritorno sia una raccolta di 4.

Una cosa fondamentale è che se puoi recuperare un elemento dalla collezione puoi applicare un controllo / regola su di esso per trovare se è necessario tornare su no e tale controllo può essere un confronto di simulazione di monte carlo complesso o un semplice indice dai un'occhiata. L'implementazione di questo controllo nel tuo caso è che il suo indice è n più o meno dell'indice dell'elemento reale.

Un presupposto che si ha è che l'indice di questa matrice rappresenti qualcosa che si adatti alla definizione di "intorno", ad esempio l'altezza degli alberi in una foresta o il numero di persone uccise in incidenti o velocità del vento in determinati giorni. In ogni caso, supponi che l'indice rappresenti una sorta di sequenza o linea temporale e quando chiamiamo getCollectionAround (x, y, z) otterrai una raccolta o un set back vuoto che si adatta alla critica di "around".

Puoi chiamare questa ricerca di prossimità basata sull'indice

    
risposta data 03.11.2017 - 12:20
fonte

Leggi altre domande sui tag