2009-09-28 8 views
8

Pourquoi la classe Matrix n'a aucune méthode pour éditer ses vecteurs et composants? Il semble que tout dans une matrice peut être lu mais pas écrit. Est-ce que je me trompe? Y a-t-il une classe similaire à celle d'un tiers qui me permettrait de supprimer des lignes et de les éditer intentionnellement?Matrices limitées dans Ruby

S'il vous plaît, informez-moi s'il n'y a pas un tel cours - je vais arrêter de chercher.

+0

Pouvez-vous expliquer ce que vous en faites? – khelll

+0

Je suis à la recherche de 'mauvaises' lignes et colonnes (qui sont entièrement constituées de zéros), puis je voudrais les supprimer. J'ai déjà le code pour le faire, mais écrit complètement via Arrays. Néanmoins, j'essaie de trouver une solution plus précise et plus jolie. – gmile

Répondre

5

Le concepteur de la classe Matrix doit avoir été un fan des structures de données immuables et de la programmation fonctionnelle. Oui tu as raison.

Dans tous les cas, il existe une solution simple pour ce que vous voulez. Utilisez Matrix pour ce qu'il peut faire, alors, utilisez simplement .to_a pour obtenir un tableau réel.

>> Matrix.identity(2).to_a 
=> [[1, 0], [0, 1]] 

Voir aussi Numerical Ruby Narray. Vous pouvez également sélectionner la classe pour ajouter plus de comportement. Si vous faites cela, veuillez patcher une sous-classe de Matrix. (Il y a des projets de bibliothèque Ruby qui veulent plus de comportement de require d classes donc ils les modifient directement, rendant leurs nouveaux fichiers quelque peu toxiques.Ils auraient facilement pu patcher une classe de sous-classes ou singleton.)

Oh, et khelll (:-) voudrais probablement que je vous dise qu'il y a très probablement un moyen pour vous de faire ce que vous voulez in a functional style. C'est-à-dire en créant de nouveaux objets plutôt qu'en modifiant les anciens.

+0

Hmm, Ok, peut-être que vous avez raison – gmile

+0

+1 pour avoir mentionné l'immuabilité et la programmation fonctionnelle, c'est pourquoi j'ai demandé ce que vous voulez faire exactement, car il devrait y avoir un moyen mais sans modifier la matrice actuelle. – khelll