Saya ingin memanggil metode, berikan panjangnya dan buatkan string alfanumerik acak.
Apakah ada perpustakaan utilitas di luar sana yang mungkin memiliki banyak jenis fungsi ini?
objective-c
cocoa
string
random
alphanumeric
Menangkal
sumber
sumber
NSString
untukletters
saat sederhanachar
array yang akan bekerja dengan baik. Bahkan, menggunakan[letters characterAtIndex:(rand() % [letters length])]
bagi saya tampaknya kurang ringkas daripada adilletters[rand() % strlen(letters)]
. Kelas-kelas Foundation sangat membantu, tetapi untuk hal-hal yang paling sederhana, mereka dapat berfungsi untuk mengaburkan kode kita daripada meningkatkannya.%C
bukan%c
, karenacharacterAtIndex:
mengembalikanunichar
arc4random_uniform((int)[letters length])
Tidak persis apa yang Anda tanyakan, tetapi masih berguna:
Output sampel:
sumber
sumber
alphabet
setiap waktu? Itu konstan dan tidak tergantung pada loop.NSArray
cache-nyalength
, seharusnya tidak menjadi hambatan kinerja.Tentunya Anda dapat membuat ini lebih pendek:
sumber
Jika Anda ingin membatasi diri hanya untuk karakter hex, maka opsi paling sederhana adalah membuat UUID:
Contoh output:
16E3DF0B-87B3-4162-A1A1-E03DB2F59654
.Jika Anda ingin string acak yang lebih kecil maka Anda bisa mengambil 8 karakter pertama saja.
Ini adalah versi 4 UUID yang berarti karakter pertama dalam 3 dan 4 kelompok tidak acak (mereka akan selalu
4
dan salah8
,9
,A
atauB
).Setiap karakter lain dalam string sepenuhnya acak dan Anda dapat menghasilkan jutaan UUID setiap detik selama ratusan tahun tanpa banyak risiko UUID yang sama dihasilkan dua kali.
sumber
NSString *uuid = [UUID UUID]
Versi kategori dari jawaban Jeff B.
NSString + Random.h
NSString + Random.m
sumber
Anda juga bisa membuat UUID. Meskipun tidak benar-benar acak, mereka rumit dan unik yang membuatnya tampak acak untuk sebagian besar kegunaan. Hasilkan satu sebagai string dan kemudian ambil rentang karakter yang sama dengan panjang yang dilewati.
sumber
Cepat
sumber
64
dengan yang dihitungupperBound
. Saya menghitung diupperBound
luar blok karena saya pikir itu berkinerja lebih baik.Berikut cara berbeda untuk mengatasinya. Alih-alih menggunakan serangkaian karakter yang sudah disiapkan, Anda dapat memilih antara bilangan bulat dan karakter, dan menghasilkan daftar karakter dinamis untuk dipilih. Ini sangat ramping dan cepat, tetapi memiliki kode sedikit lebih banyak.
Ketika saya melakukan pembuatan karakter acak, saya lebih suka bekerja secara langsung dengan bilangan bulat dan melemparkannya, daripada menulis daftar karakter yang ingin saya gunakan. Mendeklarasikan variabel di bagian atas membuatnya lebih sistem independen, tetapi kode ini mengasumsikan bahwa angka akan memiliki nilai lebih rendah dari huruf, dan bahwa huruf besar akan memiliki nilai lebih rendah daripada huruf kecil.
sumber
Solusi alternatif di Swift
sumber
Menambah jawaban bagus yang diberikan oleh Melvin, berikut adalah fungsi yang saya buat ( dalam SWIFT! ) Untuk mendapatkan string acak:
Berikut ini adalah hasil tes dari panggilan
randomStringOfLength(10)
: uXa0igA8wmsumber
Menghasilkan string acak alfanumerik huruf kecil dengan panjang yang diberikan:
sumber
Modifikasi beberapa ide di sini, dan dalam dilakukan Swift 4.0
Pemakaian:
sumber
Jika Anda menginginkan string unicode acak, Anda bisa membuat byte acak dan kemudian menggunakan yang valid.
Konversi dari NSString ke NSData dan kembali diperlukan untuk mendapatkan string UTF-8 yang valid. Sadarilah bahwa panjang tidak harus menjadi panjang NSString yang dibuat pada akhirnya.
sumber
Saya melakukan ini menggunakan sederhana,
char[]
bukanNSString *
untuk alfabet. Saya menambahkan ini ke kategori NSString.sumber
sumber
Metode menelepon:
Metode:
Hasil:
sumber
untuk Swift 3.0
sumber
sumber
Modifikasi untuk jawaban keithyip:
sumber