πώς μπορώ να διαλέξω τυχαία από έναν πίνακα;
<p>θέλω να μάθω αν υπάρχει πολύ πιο καθαρός τρόπος για να γίνει αυτό. βασικά, θέλω να διαλέξω ένα τυχαίο στοιχείο από μια σειρά μεταβλητού μήκους. κανονικά, θα το έκανα έτσι:</p><pre><code>myarray = ["stuff", "widget", "ruby", "goodies", "java", "emerald", "etc" ] item = myarray[rand(myarray.length)] </code></pre><p>υπάρχει κάτι που είναι πιο ευανάγνωστο/απλούστερο για την αντικατάσταση της δεύτερης γραμμής; ή είναι αυτός ο καλύτερος τρόπος να το κάνετε. υποθέτω ότι θα μπορούσατε να κάνετε <code>myarray.shuffle.first</code>, αλλά είδα μόνο <code>#shuffle</code> πριν από λίγα λεπτά για so, δεν το έχω χρησιμοποιήσει ακόμα.</p>
<p>απλά χρησιμοποιήστε <a href="http://ruby-doc.org/core-1.9.3/array.html#method-i-sample"><code>array#sample</code></a> :</p><pre><code>[:foo, :bar].sample # =&gt; :foo, or :bar :-) </code></pre><p>διατίθεται σε ruby 1.9.1+. για να μπορέσετε να το χρησιμοποιήσετε με μια προηγούμενη έκδοση του ruby, θα μπορούσατε <a href="https://github.com/marcandre/backports"><code>require "backports/1.9.1/array/sample"</code></a> .</p><p>σημειώστε ότι στο ruby 1.8.7 υπάρχει κάτω από το ατυχές όνομα <code>choice</code>; μετονομάστηκε σε μεταγενέστερη έκδοση, επομένως δεν πρέπει να το χρησιμοποιήσετε.</p><p>παρόλο που δεν είναι χρήσιμη σε αυτή την περίπτωση, το <code>sample</code> δέχεται ένα όρισμα αριθμού σε περίπτωση που θέλετε μια σειρά διακριτών δειγμάτων.</p>
Για τον SQL Server 2005, θα ήθελα να συστήσει τη χρήση μεταβλητών τραπέζι και εν μέρει την οικοδόμηση των δεδομένων καθώς πηγαίνετε. 


Για να το κάνετε αυτό, δημιουργήστε μια μεταβλητή πίνακα που αντιπροσωπεύει τελικό σύνολο αποτελεσμάτων σας που θέλετε να στείλετε στο χρήστη.


Στη συνέχεια, βρείτε πρωτοβάθμια τραπέζι σας (για παράδειγμα ο πίνακας παραγγελιών στο παράδειγμά σας πάνω) και τραβήξτε αυτά τα δεδομένα, καθώς και ένα κομμάτι των συμπληρωματικών στοιχείων που μόνο να πω ένα ενταχθεί μακριά (το όνομα του πελάτη, το όνομα του προϊόντος). Μπορείτε να κάνετε ένα SELECT INTO να θέσει αυτό το κατ 'ευθείαν στην μεταβλητή τραπέζι σας.


Από εκεί, μετακινηθείτε μέσα από το πίνακα και για κάθε σειρά, κάνει ένα σωρό μικρά SELECT ερωτήματα που ανακτά όλα τα συμπληρωματικά στοιχεία που χρειάζεστε για το σύνολο των αποτελεσμάτων σας. Τοποθετήστε τα σε κάθε στήλη as you go.


Μόλις ολοκληρωθεί, μπορείτε να κάνετε ένα απλό SELECT * από μεταβλητές τραπέζι σας και να επιστρέψετε αυτό το αποτέλεσμα που στο χρήστη.


Δεν έχω κανένα σκληρό αριθμούς για αυτό, αλλά έχουν υπάρξει τρεις διαφορετικές περιπτώσεις που έχω εργαστεί για σήμερα, όπου κάνει αυτά τα μικρότερα ερωτήματα έχει πραγματικά δουλέψει πιο γρήγορα από ό, τι κάνει ένα τεράστιο ερώτημα επιλογής με μια δέσμη των ενώνει. Δεν μπορείτε να το κάνετε αυτό κάποιου προγράμματος (με ασφαλή τρόπο που είναι) χωρίς να δημιουργεί έναν νέο πίνακα. 


Τι του Enterprise Manager κάνει όταν διαπράττουν μια αναδιάταξη είναι να δημιουργήσει ένα νέο πίνακα, μετακινήστε τα στοιχεία και στη συνέχεια να διαγράψετε το παλιό τραπέζι και να μετονομάσετε το νέο πίνακα με το υπάρχον όνομα. 


Αν θέλετε στήλες σας σε μια συγκεκριμένη σειρά / ομάδα χωρίς να μεταβάλλει τη φυσική τους σειρά, μπορείτε να δημιουργήσετε μια προβολή η οποία μπορεί να είναι ό, τι επιθυμείτε. Για C ++, [Boost.Random](http://www.boost.org/libs/random/) είναι ίσως ό, τι ψάχνετε. Έχει υποστήριξη για MT (μεταξύ πολλών άλλων αλγορίθμων), και να συλλέγουν εντροπία μέσω της `nondet_random`κατηγορίας. Τσέκαρέ το! :-) Αυτή είναι η γνώμη μου, αλλά? όπως ακριβώς και οι τάξεις περίπτωση δεν, θα ήθελα να εφαρμόσουν μια `copy`μέθοδο του είδους στην τάξη για να καταστεί δυνατή η τροποποίηση, διατηρώντας παράλληλα το αμετάβλητο, αλλά υπάρχει ορισμένες περιπτώσεις που δεν μπορώ να βοηθήσω να το μεταβλητό? Για παράδειγμα, όταν κάτι αναμένεται να γίνει η λειτουργία αντιγραφής είναι πολύ μεγάλη και αργή για την κατηγορία? όπως όταν η τάξη έχει τόσα πολλά συχνά τροποποιημένο μέλη. Και μην ανησυχείτε για χιλιάδες περιπτώσεις που επιπλέουν γύρω στη μνήμη, επειδή είναι αυτόματα GC'ed, οπότε το πιο πραγματικό πρόβλημα είναι ο χρόνος κόστος της αντιγραφής περιπτώσεις της κλάσης. Παρακαλώ πείτε μου εάν η γνώμη μου είναι κάπως λάθος :) Υποθέτω ότι προσπαθείτε να κάνετε το περιβάλλον εντολή ως επιεικής δυνατόν. Αν αυτή είναι η περίπτωση, σας προτείνω να χρησιμοποιήσετε έναν αλγόριθμο παρόμοιο με αυτό:


1. Διαβάστε στο κορδόνι
	* Χωρίστε το string σε μάρκες
	* Χρησιμοποιήστε ένα λεξικό για να μετατρέψετε τα συνώνυμα σε μια κοινή μορφή
	* Για παράδειγμα, μετατροπή «χτύπησε», «γροθιά», «απεργία», και «κλωτσιά» όλα για να «χτυπήσει»
	* Εκτελέστε ενέργειες σε ένα μη διατεταγμένο, χωρίς αποκλεισμούς βάση
	* **Μη αριθμημένη** - «γροθιά τον πίθηκο στο πρόσωπο» είναι το ίδιο πράγμα όπως «το πρόσωπο στο γροθιά μαϊμού»
	* **Inclusive** - Εάν η εντολή είναι υποτίθεται ότι είναι «γροθιά τον πίθηκο στο πρόσωπο» και παρέχουν «μαϊμού γροθιά», θα πρέπει να ελέγξετε πόσες εντολές αυτή ταιριάζει. Εάν μόνο μία εντολή, να κάνει αυτή την ενέργεια. Θα μπορούσε ακόμη και να είναι μια καλή ιδέα να έχουμε προτεραιότητες εντολή, ακόμη και αν υπήρχαν ακόμη αγώνες, θα εκτελέσει την κορυφή δράση. Δεν υπάρχει τίποτα που θα κάνει αυτόματα ό, τι θέλετε.


Ωστόσο, υπάρχει μια ενότητα zipfile python που θα κάνουν αυτό το εύκολο να το κάνουμε. Εδώ είναι πώς να μετακινηθείτε πάνω από τις γραμμές του αρχείου.



```
#!/usr/bin/python

import zipfile
f = zipfile.ZipFile('myfile.zip')

for subfile in f.namelist():
    print subfile
    data = f.read(subfile)
    for line in data.split('\n'):
        print line

``` για να ρωτήσει και να σταματήσει αν πατήσεις κάτι άλλο εκτός από `y’ ή ‘y’

read -p "are you sure? " -n 1 -r

echo # (optional) move to a new line

if [[ ! $reply =~ ^[yy]$ ]]

then

echo -ne "\ncancelled\n"

exit 1

fi

echo -ne "\n"

το μυστικό είναι η κανονική έκφραση (regular experssion) '^[y… Πιστεύω ότι αυτή είναι μία από τις επιλογές που δεν μπορείτε να κάνετε απευθείας στη γραμμή εντολών. Μπορείτε μάλιστα να χρειαστεί να επεξεργαστείτε το DBML. Ωστόσο, αυτό δεν είναι μια δύσκολη αλλαγή, οπότε θα πρέπει να είναι σε θέση να αυτοματοποιήσει ένα βασικό εργαλείο της γραμμής εντολών. να τα πάρουμε με τη σειρά για να μη γίνει μπέρδεμα;

άρχικά, ένας αυτοματοποιημένος εγκαταστάτης μπορεί να μην εμφανίσει κάποιο μήνυμα λάθους αλλά αρκεί ένα τυπογραφικό λάθος στον κώδικά του για να μην πετύχει μια απλή ρύθμιση ας πούμε.

τώρα, το μενού του septor στο πρώτο screenshot αντιστοιχεί στη… Μην αμελήσετε το «σύντροφο» εργαλείο της γραμμής εντολών. Μπορείτε να το χρησιμοποιήσετε για την έξοδο του σωλήνα σε TextMate, οπότε αν μπορείτε να κάνετε τα εξής ...



```
diff file1.py file2.py | mate

```

... αυτό δεν θα είναι μόνο ανοικτή σε TextMate, αλλά είναι αρκετά έξυπνος για να ξέρει ότι ψάχνετε σε μια διαφορά και τονίζουν τις γραμμές στην οθόνη.


ενσωμάτωση SVN TextMate είναι μεγάλη? φαίνεται επίσης να έχουν δέσμες για κάποια άλλα συστήματα ελέγχου εκδόσεων, καθώς και.


Προσθέστε GetBundle να περιηγηθείτε στο αποθετήριο πακέτο. Βρήκα το πακέτο jQuery μέσα από αυτό και είναι πολύ βολικό.


Όπως άλλοι έχουν αναφερθεί, το τροχαίο το δικό σας πακέτο για συχνά χρησιμοποιούμενες αποσπάσματα είναι πολύ χρήσιμη. Αν έχετε κάποια αποσπάσματα που είναι ειδικά για ένα έργο ή πλαίσιο, ίσως να θέλετε να πρόθεμα όλα αυτά με μια κοινή επιστολή για να κρατήσει το χώρο ονομάτων τακτοποιημένο.