Esiste una versione della funzione removeElement in Go per il pacchetto vettoriale come Java ha nella sua classe Vector?
Domanda
Sto eseguendo il porting su alcuni codici Java nella lingua Go di Google e sto convertendo tutto il codice, tranne per il fatto che sono bloccato su una sola parte dopo una porta incredibilmente fluida. Il mio codice Go è simile al seguente e la sezione di cui sto parlando è commentata:
func main() {
var puzzleHistory * vector.Vector;
puzzleHistory = vector.New(0);
var puzzle PegPuzzle;
puzzle.InitPegPuzzle(3,2);
puzzleHistory.Push(puzzle);
var copyPuzzle PegPuzzle;
var currentPuzzle PegPuzzle;
currentPuzzle = puzzleHistory.At(0).(PegPuzzle);
isDone := false;
for !isDone {
currentPuzzle = puzzleHistory.At(0).(PegPuzzle);
currentPuzzle.findAllValidMoves();
for i := 0; i < currentPuzzle.validMoves.Len(); i++ {
copyPuzzle.NewPegPuzzle(currentPuzzle.holes, currentPuzzle.movesAlreadyDone);
copyPuzzle.doMove(currentPuzzle.validMoves.At(i).(Move));
// There is no function in Go's Vector that will remove an element like Java's Vector
//puzzleHistory.removeElement(currentPuzzle);
copyPuzzle.findAllValidMoves();
if copyPuzzle.validMoves.Len() != 0 {
puzzleHistory.Push(copyPuzzle);
}
if copyPuzzle.isSolutionPuzzle() {
fmt.Printf("Puzzle Solved");
copyPuzzle.show();
isDone = true;
}
}
}
}
Se non è disponibile una versione, che credo non ci sia ... qualcuno sa come farei per implementare una cosa del genere da solo?
Soluzione
Che ne dici di Vector.Delete (i)?
Altri suggerimenti
Al momento Go non supporta operatori di uguaglianza generici. Quindi dovrai scrivere qualcosa che scorre sul vettore e rimuove quello corretto.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow