Skip to main content
Code Review

Return to Answer

added 151 characters in body
Source Link
Martin R
  • 24.2k
  • 2
  • 38
  • 96

with a single test instead of two per iteration. Or even simpler:

stack2 = stack1.reversed()
stack1.removeAll()

(If your queues become really large then you might want to check which of the above methods is faster.)

If a function body consists of a single expression then the return keyword can be omitted.

class MyQueue<Element> {
 
 private var stack1: [Element]
 private var stack2: [Element]
 
 init() {
 stack1 = []
 stack2 = []
 }
 
 func push(_ x: Element) {
 stack1.append(x)
 }
 
 func pop() -> Element? {
 if stack2.isEmpty {
 while let elemstack2 = stack1.popLastreversed() {
 stack2stack1.appendremoveAll(elem)
 }
 }
 return stack2.popLast()
 }
 
 func peek() -> Element? {
 stack2.last ?? stack1.first
 }
 
 func empty() -> Bool {
 stack1.isEmpty && stack2.isEmpty
 }
}

with a single test instead of two per iteration.

If a function body consists of a single expression then the return keyword can be omitted.

class MyQueue<Element> {
 
 private var stack1: [Element]
 private var stack2: [Element]
 
 init() {
 stack1 = []
 stack2 = []
 }
 
 func push(_ x: Element) {
 stack1.append(x)
 }
 
 func pop() -> Element? {
 if stack2.isEmpty {
 while let elem = stack1.popLast() {
 stack2.append(elem)
 }
 }
 return stack2.popLast()
 }
 
 func peek() -> Element? {
 stack2.last ?? stack1.first
 }
 
 func empty() -> Bool {
 stack1.isEmpty && stack2.isEmpty
 }
}

with a single test instead of two per iteration. Or even simpler:

stack2 = stack1.reversed()
stack1.removeAll()

(If your queues become really large then you might want to check which of the above methods is faster.)

If a function body consists of a single expression then the return keyword can be omitted.

class MyQueue<Element> {
 
 private var stack1: [Element]
 private var stack2: [Element]
 
 init() {
 stack1 = []
 stack2 = []
 }
 
 func push(_ x: Element) {
 stack1.append(x)
 }
 
 func pop() -> Element? {
 if stack2.isEmpty {
 stack2 = stack1.reversed()
 stack1.removeAll()
 }
 return stack2.popLast()
 }
 
 func peek() -> Element? {
 stack2.last ?? stack1.first
 }
 
 func empty() -> Bool {
 stack1.isEmpty && stack2.isEmpty
 }
}
added 154 characters in body
Source Link
Martin R
  • 24.2k
  • 2
  • 38
  • 96

If a function body consists of a single expression then the return keyword can be omitted.

Putting it all together, we get

class MyQueue<Element> {
 
 private var stack1: [Element]
 private var stack2: [Element]
 
 init() {
 stack1 = []
 stack2 = []
 }
 
 func push(_ x: Element) {
 stack1.append(x)
 }
 
 func pop() -> Element? {
 if stack2.isEmpty {
 while let elem = stack1.popLast() {
 stack2.append(elem)
 }
 }
 return stack2.popLast()
 }
 
 func peek() -> Element? {
 return stack2.last ?? stack1.first
 }
 
 func empty() -> Bool {
 return stack1.isEmpty && stack2.isEmpty
 }
}
  • I had to inspect the code in order to understand that what you have implemented is a "first in, first out" queue. This would be more obvious to a user of your code (or to you in one year) with a more specific class name, such as FIFO or FIFOQueue.

  • Typical names for adding something to a FIFO and retrieving it are enqueue and dequeue.

  • Swift collection types have an isEmptytypically use "isEmpty" as the name of a property to indicatewhich indicates whether itthe collection contains elements or not:

    var isEmpty: Bool {
     stack1.isEmpty && stack2.isEmpty
    }
    

Putting it all together, we get

class MyQueue<Element> {
 
 private var stack1: [Element]
 private var stack2: [Element]
 
 init() {
 stack1 = []
 stack2 = []
 }
 
 func push(_ x: Element) {
 stack1.append(x)
 }
 
 func pop() -> Element? {
 if stack2.isEmpty {
 while let elem = stack1.popLast() {
 stack2.append(elem)
 }
 }
 return stack2.popLast()
 }
 
 func peek() -> Element? {
 return stack2.last ?? stack1.first
 }
 
 func empty() -> Bool {
 return stack1.isEmpty && stack2.isEmpty
 }
}
  • I had to inspect the code in order to understand that what you have implemented is a "first in, first out" queue. This would be more obvious to a user of your code (or to you in one year) with a more specific class name, such as FIFO or FIFOQueue.

  • Typical names for adding something to a FIFO and retrieving it are enqueue and dequeue.

  • Swift collection types have an isEmpty property to indicate whether it contains elements or not:

    var isEmpty: Bool {
     stack1.isEmpty && stack2.isEmpty
    }
    

If a function body consists of a single expression then the return keyword can be omitted.

Putting it all together, we get

class MyQueue<Element> {
 
 private var stack1: [Element]
 private var stack2: [Element]
 
 init() {
 stack1 = []
 stack2 = []
 }
 
 func push(_ x: Element) {
 stack1.append(x)
 }
 
 func pop() -> Element? {
 if stack2.isEmpty {
 while let elem = stack1.popLast() {
 stack2.append(elem)
 }
 }
 return stack2.popLast()
 }
 
 func peek() -> Element? {
 stack2.last ?? stack1.first
 }
 
 func empty() -> Bool {
 stack1.isEmpty && stack2.isEmpty
 }
}
  • I had to inspect the code in order to understand that what you have implemented is a "first in, first out" queue. This would be more obvious to a user of your code (or to you in one year) with a more specific class name, such as FIFO or FIFOQueue.

  • Typical names for adding something to a FIFO and retrieving it are enqueue and dequeue.

  • Swift collection types typically use "isEmpty" as the name of a property which indicates whether the collection contains elements or not:

    var isEmpty: Bool {
     stack1.isEmpty && stack2.isEmpty
    }
    
added 154 characters in body
Source Link
Martin R
  • 24.2k
  • 2
  • 38
  • 96

Finally, naming: I had to inspect the code in order to understand that what you have implemented is a "first in, first out" queue. This would be more obvious to a user of your code (or to you in one year) with a more specific class name, such as FIFO or FIFOQueue. Typical names for adding something to a FIFO and retrieving it are enqueue and dequeue.

  • I had to inspect the code in order to understand that what you have implemented is a "first in, first out" queue. This would be more obvious to a user of your code (or to you in one year) with a more specific class name, such as FIFO or FIFOQueue.

  • Typical names for adding something to a FIFO and retrieving it are enqueue and dequeue.

  • Swift collection types have an isEmpty property to indicate whether it contains elements or not:

    var isEmpty: Bool {
     stack1.isEmpty && stack2.isEmpty
    }
    

Finally, naming: I had to inspect the code in order to understand that what you have implemented is a "first in, first out" queue. This would be more obvious to a user of your code (or to you in one year) with a more specific class name, such as FIFO or FIFOQueue. Typical names for adding something to a FIFO and retrieving it are enqueue and dequeue.

Finally, naming:

  • I had to inspect the code in order to understand that what you have implemented is a "first in, first out" queue. This would be more obvious to a user of your code (or to you in one year) with a more specific class name, such as FIFO or FIFOQueue.

  • Typical names for adding something to a FIFO and retrieving it are enqueue and dequeue.

  • Swift collection types have an isEmpty property to indicate whether it contains elements or not:

    var isEmpty: Bool {
     stack1.isEmpty && stack2.isEmpty
    }
    
added 247 characters in body
Source Link
Martin R
  • 24.2k
  • 2
  • 38
  • 96
Loading
added 247 characters in body
Source Link
Martin R
  • 24.2k
  • 2
  • 38
  • 96
Loading
Source Link
Martin R
  • 24.2k
  • 2
  • 38
  • 96
Loading
default

AltStyle によって変換されたページ (->オリジナル) /