การใช้งานอย่างรวดเร็ว 30 วินาทีของรหัส: คอลเลกชันตัวอย่างของตัวอย่าง Swift 4 ที่มีประโยชน์ที่คุณสามารถเข้าใจได้ภายใน 30 วินาทีหรือน้อยกว่า
หมายเหตุ :-นี่ไม่มีส่วนเกี่ยวข้องกับรหัส 30 วินาทีดั้งเดิม
หากคุณมาที่นี่จากที่ดิน JavaScript คุณควรทราบว่าโครงการนี้ใช้ Swift 4 ดังนั้นตัวอย่างทั้งหมดจะไม่ทำงานตามที่คาดไว้ในทุกระบบ คุณจะต้องตรวจสอบเวอร์ชัน Swift ของคุณโดยไปที่ Project แล้วทำตามขั้นตอนด้านล่าง 
หากคุณต้องการความช่วยเหลือในการติดตั้ง Swift 4 ที่มีเสถียรภาพล่าสุดตรวจสอบ Swift.org หากคุณพบปัญหาให้แน่ใจว่าคุณได้ตรวจสอบ StackOverflow
โครงการนี้มีตัวอย่างที่มีประโยชน์มากมายซึ่งสามารถช่วยผู้เริ่มต้นและผู้มาใหม่ได้อย่างรวดเร็วเพิ่มทักษะของพวกเขาใน Swift 4
bubbleSortfilterBoolschunkcountOccurrencesdeepFlattendifferenceduplicatesevery_nthinsertionSortfisherYatesShufflecalcMediancalcBetterMedianaveragefactorialgcdlcm1lcm2maxnminnallUniquejustKeysjustValuesbytesFromStringcapitalizeFirstcapitalizeEveryWordcountVowelslowerCaseFirstLetterOfFirstWordisLowerCaseisUpperCasepalindromeanagramdropdropRightWhilenthElementfilterNonUniquegenericFlattencommaSeparatedmostFrequentrepeatingaveragegcdlcm1lcm2maxnminnfactorialcalcMediancalcBetterMedianradiansToDegreesallUniquejustKeysjustValuesbytesFromStringcapitalizeFirstcapitalizeEveryWordcountVowelslowerCaseFirstLetterOfFirstWordisLowerCaseisUpperCasepalindromesnakesimple_snake_casefirstUniqueCharacterrepeatingrepeatingBubblesort เป็นอัลกอริทึมการเรียงลำดับที่ใช้เทคนิคการเปรียบเทียบซ้ำ ๆ และสลับองค์ประกอบที่อยู่ติดกันหากพวกเขาอยู่ในลำดับที่ไม่ถูกต้อง
func bubbleSort ( _ inputArr : [ Int ] ) -> [ Int ] {
guard inputArr . count > 1 else {
return inputArr
}
var res = inputArr
let count = res . count
var isSwapped = false
repeat {
isSwapped = false
for index in stride ( from : 1 , to : count , by : 1 ) {
if res [ index ] < res [ index - 1 ] {
res . swapAt ( ( index - 1 ) , index )
isSwapped = true
}
}
} while isSwapped
return res
} bubbleSort ( [ 32 , 12 , 12 , 23 , 11 , 19 , 81 , 76 ] ) //[11, 12, 12, 19, 23, 32, 76, 81]
⬆กลับไปด้านบน
ชิ้นอาร์เรย์เป็นอาร์เรย์ที่เล็กกว่าในขนาดที่แน่นอน
func chunk ( arr : [ Any ] , chunkSize : Int ) -> [ Any ] {
let chunks = stride ( from : 0 , to : arr . count , by : chunkSize ) . map {
Array ( arr [ $0 ..< min ( $0 + chunkSize , arr . count ) ] )
}
return chunks
} chunk ( arr : [ 2 , 4 , 6 , 8 ] , chunkSize : 1 ) //[[2], [4], [6], [8]]
chunk ( arr : [ 1 , 3 , 5 , 9 ] , chunkSize : 4 ) //[[1, 3, 5, 9]]
chunk ( arr : [ " hi " , " yo " , " bye " , " bai " ] , chunkSize : 3 ) //[["hi", "yo", "bye"], ["bai"]]
chunk ( arr : [ " young " , " scrappy " , " hungry " ] , chunkSize : 2 ) //[["young", "scrappy"], ["hungry"]]
⬆กลับไปด้านบน
ส่งคืนองค์ประกอบ Nth ทุกรายการในรายการที่กำหนดและรายการใหม่ถูกสร้างขึ้นที่มีองค์ประกอบ n ทุกรายการของรายการที่กำหนด
func getEvery ( nth : Int , from list : [ Any ] ) {
var nthElements = [ Any ] ( )
var shiftedList = list
shiftedList . insert ( 0 , at : 0 )
for (i , element ) in shiftedList . enumerated ( ) {
if i > 0 && i . isMultiple ( of : nth ) {
nthElements . append ( element )
}
}
} getEvery ( nth : 4 , from : [ " The " , " quick " , " brown " , " fox " , " jumped " , " over " , " the " , " lazy " , " dog " ] ) //["fox", "lazy"]
getEvery ( nth : 2 , from : [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) //[2, 4, 6, 8]
⬆กลับไปด้านบน
ลบทุกค่าที่ไม่ใช่บูลีน
func filterBools ( _ inputArr : [ Any ] ) -> [ Any ] {
return inputArr . compactMap { $0 as? Bool }
} filterBools ( [ false , 2 , " lol " , 3 , " a " , " s " , 34 , false , true ] ) //[false, false, true]
⬆กลับไปด้านบน
นับเหตุการณ์ที่เกิดขึ้นของสตริงในอาร์เรย์
func countOccurrences ( arr : [ String ] , into : String ) -> Int {
return arr . reduce ( 0 ) { $1 == into ? $0 + 1 : $0 }
} countOccurrences ( arr : [ " FOO " , " FOO " , " BAR " ] , into : " FOO " ) //2
⬆กลับไปด้านบน
ลึกลงไปในรายการที่มีการเรียกซ้ำ
func deepFlatten ( arr : [ AnyHashable ] ) -> [ AnyHashable ] {
var arr2 = [ AnyHashable ] ( )
for el in arr {
if let el = el as? Int {
arr2 . append ( el )
}
if let el = el as? [ Any ] {
let res = deepFlatten ( arr : el as! [ AnyHashable ] )
for i in res {
arr2 . append ( i )
}
}
}
return arr2
} deepFlatten ( arr : [ 6 , 5 , 4 , [ 3 , 2 ] , [ 1 ] ] ) //[6, 5, 4, 3, 2, 1]
⬆กลับไปด้านบน
องค์ประกอบ Return ที่ไม่มีอยู่ในทั้งสองอาร์เรย์ที่กำหนด (เช่นองค์ประกอบที่มีอยู่ในอาร์เรย์เดียวและไม่ใช่ทั้งสองอย่าง)
func difference ( arr1 : [ AnyHashable ] , arr2 : [ AnyHashable ] ) -> Set < AnyHashable > {
return Set ( arr1 ) . symmetricDifference ( arr2 )
} difference ( arr1 : [ 2 , 4 , 6 , 8 ] , arr2 : [ 10 , 8 , 6 , 4 , 2 , 0 ] ) //10
difference ( arr1 : [ " mulan " , " moana " , " belle " , " elsa " ] , arr2 : [ " mulan " , " moana " , " belle " , " pocahontas " ] ) //elsa, pocahontas
⬆กลับไปด้านบน
ตรวจสอบองค์ประกอบที่ซ้ำกันในอาร์เรย์ที่กำหนด
func duplicates ( arr1 : [ AnyHashable ] ) -> Bool {
return arr1 . count != ( Set < AnyHashable > ( arr1 ) ) . count
} duplicates ( arr1 : [ 5 , 4 , 3 , 2 ] ) //false
duplicates ( arr1 : [ " hermione " , " hermione " , " ron " , " harry " ] ) //true
⬆กลับไปด้านบน
อัลกอริทึมการเรียงลำดับการแทรก-รับแรงบันดาลใจจาก Ray Wenderlich https://github.com/raywenderlich/swift-algorithm-club/tree/master/insertion%20sort
func insertionSort ( _ array : [ Int ] ) -> [ Int ] {
var a = array // 1
for index in stride ( from : 1 , to : a . count , by : 1 ) {
var y = index
while y > 0 && a [ y ] < a [ y - 1 ] { // 3
a . swapAt ( y - 1 , y )
y -= 1
}
}
return a
} let list = [ 10 , - 1 , 3 , 9 , 2 , 27 , 8 , 5 , 1 , 3 , 0 , 26 ]
insertionSort ( list ) //[-1, 0, 1, 2, 3, 3, 5, 8, 9, 10, 26, 27]
⬆กลับไปด้านบน
ลิงค์ไปยังเอกสารประกอบการพัฒนาอย่างเป็นทางการของ Apple - https://developer.apple.com/documentation/swift/array/1688499-sort
var integerArray = [ 5 , 8 , 2 , 3 , 656 , 9 , 1 ]
var stringArray = [ " India " , " Norway " , " France " , " Canada " , " Italy " ]
integerArray . sort ( ) //[1, 2, 3, 5, 8, 9, 656]
stringArray . sort ( ) //["Canada", "France", "India", "Italy", "Norway"]integerArray . sort ( ) //[1, 2, 3, 5, 8, 9, 656]
stringArray . sort ( ) //["Canada", "France", "India", "Italy", "Norway"]
⬆กลับไปด้านบน
อัลกอริทึม Fisher-Yates หรือที่รู้จักกันในชื่อ Knuth Shuffle เพื่อสับเปลี่ยนอาร์เรย์สร้างการสลับเครื่องแบบของอาร์เรย์ที่การเปลี่ยนแปลงแต่ละครั้งมีแนวโน้มที่จะเท่ากันในเวลา O (n)
func shuffle ( arr1 : [ AnyHashable ] ) -> [ AnyHashable ] {
var arr2 = arr1
for i in stride ( from : arr1 . count - 1 , through : 1 , by : - 1 ) {
let j = Int . random ( in : 0 ... i )
if i != j {
arr2 . swapAt ( i , j )
}
}
return arr2
} var foo = [ 1 , 2 , 3 ]
shuffle ( arr1 : foo ) //[2,3,1] , foo = [1,2,3]
⬆กลับไปด้านบน
ใช้อาร์เรย์อาร์เรย์เป็นอินพุตและแปลงเป็นอาร์เรย์แบบแบนของประเภท (จัดการตัวเลือก)
/// We use flat map to flatten the array and compact map to handle optionals
/// - Parameter arrays: Array of arrays to flatten
func flatten < T > ( arrays : [ [ T ? ] ] ) -> [ T ] {
return arrays . flatMap { $0 } . compactMap { $0 }
} flatten ( arrays : [ [ " a " , " b " , " c " , " d " ] , [ " e " , " f " , " g " , " y " ] ] ) // ["a", "b", "c", "d", "e", "f", "g", "y"]
flatten ( arrays : [ [ 1 , nil , 3 , 4 ] , [ 5 , 6 , 7 , 8 ] ] ) // [1, 3, 4, 5, 6, 7, 8]
⬆กลับไปด้านบน
ใช้อาร์เรย์ของสตริงและส่งคืนสตริงเดียวกับแต่ละองค์ประกอบจากรายการอินพุตคั่นด้วยเครื่องหมายจุลภาค
/// Return the elements of `strings` separated by ", "
func commaSeparated ( _ strings : [ String ] ) -> String {
return strings . joined ( separator : " , " )
} let strs = [ " Foo " , " Bar " , " Baz " , " Qux " ]
commaSeparated ( strs ) // "Foo, Bar, Baz, Qux"
⬆กลับไปด้านบน
ใช้อาร์เรย์และส่งคืนองค์ประกอบที่พบบ่อยที่สุดที่ปรากฏในอาร์เรย์ ประเภทขององค์ประกอบในอาร์เรย์จะต้องสอดคล้องกับ hashable
// Return the most frequent element that appears in the array
func mostFrequent < Type : Hashable > ( _ arr : [ Type ] ) -> Type ? {
var dict = [ Type : Int ] ( )
for element in arr {
if dict [ element ] == nil {
dict [ element ] = 1
} else {
dict [ element ] ! += 1
}
}
return dict . sorted ( by : { $0 . 1 > $1 . 1 } ) . first ? . key
} mostFrequent ( [ 1 , 2 , 5 , 4 , 1 , 9 , 8 , 7 , 4 , 5 , 1 , 5 , 1 ] ) // 1
mostFrequent ( [ " a " , " b " , " c " , " a " ] ) // "a"
mostFrequent ( [ ] ) // nil
⬆กลับไปด้านบน
ส่งคืนค่าเฉลี่ยของสองคู่ขึ้นไปในอาร์เรย์
func average ( arr : [ Double ] ) -> Double {
return arr . reduce ( 0 , + ) / Double ( arr . count )
} average ( arr : [ 5 , 4 , 3 , 2 , 1 ] ) //3
⬆กลับไปด้านบน
คำนวณแฟคทอเรียลของตัวเลข
func factorial ( num : Int ) -> Int {
var fact : Int = 1
for index in stride ( from : 1 , to : num + 1 , by : 1 ) {
fact = fact * index
}
return fact
} factorial ( num : 4 ) //24
factorial ( num : 10 ) //3628800
⬆กลับไปด้านบน
คำนวณตัวหารร่วมที่ยิ่งใหญ่ที่สุดระหว่างสองจำนวนเต็มที่มีการเรียกซ้ำ
func gcd ( num1 : Int , num2 : Int ) -> Int {
let mod = num1 % num2
if mod != 0 {
return gcd ( num1 : num2 , num2 : mod )
}
return num2
} gcd ( num1 : 228 , num2 : 36 ) //12
gcd ( num1 : - 5 , num2 : - 10 )
⬆กลับไปด้านบน
ส่งคืนมัลติจำนวนมากน้อยที่สุดของสองจำนวนเต็มโดยใช้ฟังก์ชัน gcd ด้านบน
func lcm1 ( num1 : Int , num2 : Int ) -> Int {
return abs ( num1 * num2 ) / gcd ( num1 : num1 , num2 : num2 )
} lcm1 ( num1 : 12 , num2 : 7 ) //84
⬆กลับไปด้านบน
อาร์เรย์ที่พบบ่อยน้อยที่สุดโดยใช้ LCM แรก
func lcm2 ( arr1 : [ Int ] ) -> Int {
return arr1 . reduce ( 1 ) { lcm1 ( num1 : $0 , num2 : $1 ) }
} lcm2 ( arr1 : [ 4 , 3 , 2 ] ) //12
⬆กลับไปด้านบน
ส่งคืนองค์ประกอบสูงสุดจากอาร์เรย์ที่ให้ไว้
func maxn ( arr1 : [ Int ] ) -> Int {
if let ( _ , maxValue ) = arr1 . enumerated ( ) . max ( by : { $0 . element < $1 . element } ) {
return maxValue
}
return 0
} maxn ( arr1 : [ 2 , 9 , 5 ] ) //9
[ 2 , 9 , 5 ] . max ( ) //9
⬆กลับไปด้านบน
ส่งคืนจำนวนเต็มขั้นต่ำจากอาร์เรย์โดยไม่ต้องใช้ฟังก์ชัน .min() ในตัว (ใช้ในตัวอย่างเพื่อเปรียบเทียบผลลัพธ์)
func minn ( arr1 : [ Int ] ) -> Int {
var minVal = arr1 [ 0 ]
for num in arr1 {
minVal = ( num < minVal ) ? num : minVal
}
return minVal
} minn ( arr1 : [ 8 , 2 , 4 , 6 ] ) //2
[ 8 , 2 , 4 , 6 ] . min ( ) //2
⬆กลับไปด้านบน
วิธีหนึ่งในการคำนวณค่ามัธยฐานของอาร์เรย์ของจำนวนเต็ม
func calcMedian ( arr : [ Int ] ) -> Float {
return Float ( arr . sorted ( by : < ) [ arr . count / 2 ] )
}วิธีที่ดีกว่าในการคำนวณค่ามัธยฐานของอาร์เรย์ของจำนวนเต็ม
func calcBetterMedian ( arr : [ Int ] ) -> Float {
let sorted = arr . sorted ( )
if sorted . count % 2 == 0 {
return Float ( ( sorted [ ( sorted . count / 2 ) ] + sorted [ ( sorted . count / 2 ) - 1 ] ) ) / 2
}
return Float ( sorted [ ( sorted . count - 1 ) / 2 ] )
} calcBetterMedian ( arr : [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) //returns 4.5แปลงมุมจากเรเดียนเป็นองศา
func radiansToDegrees ( _ angle : Double ) -> Double {
return angle * 180 / . pi
} radiansToDegrees ( 4 ) // 229.183
⬆กลับไปด้านบน
ตรวจสอบรายการแบนสำหรับค่าที่ไม่ซ้ำกันทั้งหมดการส่งคืนจริงถ้าค่ารายการทั้งหมดเป็นเอกลักษณ์และเท็จหากค่ารายการไม่ซ้ำกันทั้งหมด
func allUnique ( arr : [ AnyHashable ] ) -> Bool {
return arr . count == Set < AnyHashable > ( arr ) . count
} allUnique ( arr : [ 5 , 4 , 3 , 2 ] ) //true
allUnique ( arr : [ " lol " , " rofl " , " lol " ] ) //false
⬆กลับไปด้านบน
ฟังก์ชั่นที่ยอมรับพจนานุกรมของคู่คีย์-ค่าและส่งคืนอาร์เรย์ใหม่ของคีย์
func justKeys ( dict : Dictionary < AnyHashable , AnyHashable > ) -> [ AnyHashable ] {
return Array ( dict . keys )
} var dict : Dictionary < String , String > = [ " Mulan " : " Mushu " , " Anna " : " Olaf " , " Pocahontas " : " Fleeko " ]
justKeys ( dict : dict ) //[Anna, Mulan, Pocahontas]
⬆กลับไปด้านบน
ฟังก์ชั่นที่ยอมรับพจนานุกรมของคู่คีย์-ค่าและส่งคืนอาร์เรย์ใหม่เพียงแค่ค่า
func justValues ( dict : Dictionary < AnyHashable , AnyHashable > ) -> [ AnyHashable ] {
return Array ( dict . values )
} justValues ( dict : dict ) //[Olaf, Mushu, Fleeko]
⬆กลับไปด้านบน
รับไบต์ของสตริง
func bytes ( _ str : String ) -> Int {
return str . utf8 . count
} bytes("Hello")
⬆กลับไปด้านบน
ใช้ตัวอักษรตัวแรกของสตริงทิ้งส่วนที่เหลือไว้เหมือนกัน
func capitalizeFirst ( str : String ) -> String {
var components = str . components ( separatedBy : " " )
components [ 0 ] = components [ 0 ] . capitalized
return components . joined ( separator : " " )
} capitalizeFirst(str: "i like cheesE") //I like cheesE
⬆กลับไปด้านบน
ใช้ประโยชน์จากตัวอักษรตัวแรกของทุกคำในสตริง
func capitalizeEveryWord ( str : String ) -> String {
return str . capitalized
} capitalizeEveryWord ( str : " on a scale from 1 to 10 how would you rate your pain " ) //On A Scale From...
capitalizeEveryWord ( str : " well, hello there! " ) //Well, Hello There!
⬆กลับไปด้านบน
retuns number สระใน string ที่ให้ไว้
func countVowels ( str : String ) -> Int {
var vowelCount = 0
let vowels = Set ( [ " a " , " e " , " i " , " o " , " u " ] )
for char in str . lowercased ( ) {
if vowels . contains ( " ( char ) " ) {
vowelCount += 1
}
}
return vowelCount
} countVowels ( str : " hi mom " ) //2
countVowels ( str : " aeiou " ) //5
⬆กลับไปด้านบน
Decapitalizes ตัวอักษรตัวแรกของคำแรกในสตริง
func lowerCaseFirstLetterOfFirstWord ( str : String ) -> String {
var components = str . components ( separatedBy : " " )
components [ 0 ] = components [ 0 ] . lowercased ( )
return components . joined ( separator : " " )
} lowerCaseFirstLetterOfFirstWord ( str : " Christmas Switch was a solid movie " ) //christmas Switch...
⬆กลับไปด้านบน
กลับมาจริงถ้าอักขระใด ๆ ในสตริงเป็นตัวพิมพ์ใหญ่
func isLowerCase ( str : String ) -> Bool {
return str == str . lowercased ( )
} isLowerCase ( str : " I LOVE CHRISTMAS " ) //false
isLowerCase ( str : " <3 lol " ) //true
⬆กลับไปด้านบน
ตรวจสอบว่าอักขระแต่ละตัวในสตริงคือตัวพิมพ์ใหญ่
func isUpperCase ( str : String ) -> Bool {
return str == str . uppercased ( )
} isUpperCase ( str : " LOLOLOL " ) //true
isUpperCase ( str : " lmao " ) //false
isUpperCase ( str : " Rofl " ) //false
⬆กลับไปด้านบน
ส่งคืน True ถ้าสตริงที่กำหนดเป็น palindrome, False ถ้าเป็นอย่างอื่น
func palindrome ( str : String ) -> Bool {
return str . lowercased ( ) == String ( str . reversed ( ) ) . lowercased ( )
} palindrome ( str : " racecar " ) //true
palindrome ( str : " Madam " ) //true
palindrome ( str : " lizzie " ) //false
⬆กลับไปด้านบน
ส่งคืน True ถ้าสาย 2 ที่กำหนดเป็นแอนนาแกรมที่สมบูรณ์แบบของกันและกัน False ถ้าเป็นอย่างอื่น
/// Return `true` if the 2 given strings are "perfect" anagrams.
/// (they consist of the same characters excluding whitespace)
func anagram ( _ str1 : String , _ str2 : String ) -> Bool {
let s1 = str1 . filter { !$0 . isWhitespace } . lowercased ( )
let s2 = str2 . filter { !$0 . isWhitespace } . lowercased ( )
return s1 . count == s2 . count && s1 . sorted ( ) == s2 . sorted ( )
} anagram ( " abcd3 " , " 3acdb " ) // true
anagram ( " 123 " , " 456 " ) // false
anagram ( " Buckethead " , " Death Cube K " ) // true
⬆กลับไปด้านบน
ส่งคืนอาร์เรย์ใหม่พร้อมองค์ประกอบ N ที่ถูกลบออกจากด้านซ้าย
func drop ( arr : [ AnyHashable ] , num : Int ) -> [ AnyHashable ] {
return Array ( arr . dropFirst ( num ) ) //need Array() to concert ArraySlice to Array
} drop ( arr : [ 5 , 4 , 3 , 2 , 1 , 0 ] , num : 1 )
drop ( arr : [ " Huey " , " Dewey " , " Louie " ] , num : 3 )ส่งคืน CSV-String ที่สร้างขึ้นจาก 2D-Array
func arrayToCSV ( _ inputArray : [ Array < String > ] ) -> String {
var csv : String = " "
for row in inputArray {
csv . append ( row . map { " " ( $0 ) " " } . joined ( separator : " , " ) + " n " )
}
return csv
} arrayToCSV ( [ [ " a " , " b " , " c " ] , [ " d " , " e " , " f " ] , [ " g " , " h " , " i " ] ] )
//"a", "b", "c"
//"d", "e", "f"
//"g", "h", "i"ส่งคืนฟังก์ชั่นที่กำหนดด้วยอาร์กิวเมนต์พลิก
func flip < A , B , C > ( _ function : @escaping ( ( A , B ) -> C ) ) -> ( ( B , A ) -> C ) {
return { ( a , b ) in
return function ( b , a )
}
}// flip example 1
func concat ( _ alpha : String , _ beta : String ) -> String {
return alpha + beta
}
let reverseConcat = flip ( concat )
concat ( " A " , " B " ) //"AB"
reverseConcat ( " A " , " B " ) //"BA"
// flip example 2
func gt ( _ a : Int , _ b : Int ) -> Bool {
return a > b
}
let lt = flip ( gt )
gt ( 5 , 3 ) //true
lt ( 5 , 3 ) //false
gt ( 2 , 5 ) //false
lt ( 2 , 5 ) //true
⬆กลับไปด้านบน
ลบองค์ประกอบออกจากจุดสิ้นสุดของอาร์เรย์จนกว่าฟังก์ชั่นที่ผ่านจะส่งคืนจริง
func dropRight ( arr : [ Int ] , while predicate : ( ( Int ) -> Bool ) ) -> [ Int ] {
var returnArr = arr
for item in arr . reversed ( ) {
if predicate ( item ) { break }
returnArr = returnArr . dropLast ( )
}
return returnArr
} dropRight ( arr : [ 1 , 2 , 3 , 4 , 5 ] , while : { $0 < 0 } ) //[]
dropRight ( arr : [ 1 , 2 , 3 , 4 , 5 ] , while : { $0 > 0 } ) //[1, 2, 3, 4, 5]
⬆กลับไปด้านบน
กรองค่าที่ไม่ใช่ unique ในรายการ
func filterNonUnique ( arr : [ Any ] ) -> [ Any ] {
let set = NSOrderedSet ( array : arr )
return set . array
} filterNonUnique ( arr : [ 1 , 2 , 2 , 3 , 5 ] ) // [1, 2, 3, 5]
filterNonUnique ( arr : [ " Tim " , " Steve " , " Tim " , " Jony " , " Phil " ] ) // ["Tim", "Steve", "Jony", "Phil"]
⬆กลับไปด้านบน
ส่งคืนสตริงใหม่ในเคสงู
func snake ( str : String ) -> String ? {
let pattern = " ([a-z0-9])([A-Z]) "
let regex = try ? NSRegularExpression ( pattern : pattern , options : [ ] )
let range = NSRange ( location : 0 , length : str . count )
return regex ? . stringByReplacingMatches ( in : str , options : [ ] , range : range , withTemplate : " $1_$2 " )
. lowercased ( )
. replacingOccurrences ( of : " " , with : " _ " )
. replacingOccurrences ( of : " - " , with : " _ " )
} snake ( str : " camelCase " ) // 'camel_case'
snake ( str : " some text " ) // 'some_text'
snake ( str : " some-mixed_string With spaces_underscores-and-hyphens " ) // 'some_mixed_string_with_spaces_underscores_and_hyphens'
snake ( str : " AllThe-small Things " ) // "all_the_smal_things"
⬆กลับไปด้านบน
ส่งคืนสตริงใหม่ในเคสงู
func snakeCase ( _ string : String ) -> String {
let arrayOfStrings = text . components ( separatedBy : " " )
return arrayOfStrings . joined ( separator : " _ " )
} let text = " Snake case is the practice of writing compound words or phrases in which the elements are separated with one underscore character and no spaces. "
snakeCase ( text )
⬆กลับไปด้านบน
ส่งคืนอักขระที่ไม่ซ้ำกันตัวแรกในสตริง
func firstUniqueCharacter ( _ str : String ) -> Character ? {
var countDict : [ Character : Int ] = [ : ]
for char in str {
countDict [ char ] = ( countDict [ char ] ?? 0 ) + 1
}
return str . filter { countDict [ $0 ] == 1 } . first
} firstUniqueCharacter ( " barbeque nation " ) //"r"
⬆กลับไปด้านบน
พิมพ์สตริง n ครั้งโดยไม่ต้องใช้ลูป
func repeating ( _ repeatedValue : String , count : Int ) {
guard count > 0 else {
return
}
print ( repeatedValue )
repeating ( repeatedValue , count : count - 1 )
} repeating ( " Text " , count : 5 )
⬆กลับไปด้านบน
ส่งคืนความยาวของสตริงเป็นไบต์
func stringLenghtInBytes ( string : String ) -> Int {
return ( string as NSString ) . length
} stringLenghtInBytes("Hello")
⬆กลับไปด้านบน
ส่งคืนทุกองค์ประกอบ n จากรายการที่กำหนด
func everyNth ( list : [ Any ] , n : Int ) -> [ Any ] {
return list . enumerated ( ) . compactMap ( { ( $0 . offset + 1 ) % n == 0 ? $0 . element : nil } )
} everyNth ( list : [ 1 , 2 , 3 , 4 , 5 , 6 ] , n : 2 ) // [ 2, 4, 6 ]
everyNth ( list : [ " a " , " b " , " c " , " d " , " e " , " f " ] , n : 3 ) // [ "c", "f" ]
⬆กลับไปด้านบน
ส่งคืน 1 ถ้าอาร์เรย์เรียงลำดับตามลำดับจากน้อยไปหามาก -1 ถ้าคำสั่งลดลงและ 0 ถ้าไม่ได้เรียงลำดับ
func isSorted ( arr : [ Int ] ) -> Int {
var asc : Bool = true
var prev : Int = Int . min
for elem in arr {
if elem < prev {
asc = false
break
}
prev = elem
}
if asc {
return 1
}
var dsc : Bool = true
prev = Int . max
for elem in arr {
if elem > prev {
dsc = false
break
}
prev = elem
}
if dsc {
return - 1
}
return 0
} isSorted ( arr : [ 1 , 2 , 2 , 4 , 8 ] ) // 1
isSorted ( arr : [ 8 , 4 , 4 , 2 , 1 ] ) // -1
isSorted ( arr : [ 1 , 4 , 2 , 8 , 4 ] ) // 0ส่งคืน 1 ถ้าอาร์เรย์เรียงลำดับตามลำดับจากน้อยไปมาก -1 ถ้าคำสั่งลดลงและ 0 ถ้าไม่ได้เรียงลำดับ - ตัวเลือก 2 สั้นที่สุด
func sortedArray ( arr : [ Int ] ) -> Int {
let sortedArr = arr . sorted ( by : { $1 > $0 } )
return arr == sortedArr ? 1 : arr == sortedArr . reversed ( ) ? - 1 : 0
}//Input sortedArray(arr: [1,2,3,4,5]) - Output 1
//Input sortedArray(arr: [5,4,3,2,1]) - Output -1
//Input sortedArray(arr: [6,2,3,4,8]) - Output 0
⬆กลับไปด้านบน
แปลงสตริงเคสอูฐ (ex.'applestore ',' Timcook ') เป็น Case Snake (เช่น apple_store ,' Tim_Cook ')
func camelCaseToSnake ( str : String ) -> String {
guard let regex = try ? NSRegularExpression ( pattern : " ([a-z0-9])([A-Z]) " , options : [ ] ) else {
return str
}
let range = NSRange ( location : 0 , length : str . count )
return regex . stringByReplacingMatches ( in : str , options : [ ] , range : range , withTemplate : " $1_$2 " ) . lowercased ( )
} camelCaseToSnake ( str : " appleIphoneX " )
camelCaseToSnake ( str : " camelCaseStringToSnakeCase " )
camelCaseToSnake ( str : " string " )
camelCaseToSnake ( str : String ( ) )
camelCaseToSnake ( str : " firstPullRequestForHacktoberFest?☔️? " )
⬆กลับไปด้านบน
Flip ใช้ฟังก์ชันเป็นอาร์กิวเมนต์จากนั้นทำให้อาร์กิวเมนต์แรกเป็นครั้งสุดท้าย
func flip < A , B , C > ( _ f : @escaping ( A , B ) -> C ) -> ( B , A ) -> C {
return { ( b , a ) in f ( a , b ) }
} String . init ( repeating : " ? " , count : 5 ) == flip ( String . init ( repeating : count : ) ) ( 5 , " ? " ) //true
⬆กลับไปด้านบน
ส่งคืนเพื่อนบ้านของจุดสุดยอด
public func neighborsForIndex ( _ index : Int ) -> [ VertexType ] {
return edges [ index ] . map ( { self . vertices [ $0 . v ] } )
}
⬆กลับไปด้านบน
Lizzie Siegle
Abdulhakim Ajetunmobi
Hatos Barbosa
Paul Schroder
Viktor Sokolov
Sai Sandeep Mutyala
Sören Kirchner
Alexey Ivanov
Júlio John Tavares Ramos
Camilo Andres Ibarra Yepes
Nicolas Combe
William Spanfelner
Natchanon A.