Có rất nhiều cách chức năng tốt để thực hiện việc này. Sau đây có thể là một trong những điều ngắn gọn hơn:
val v = Vector(Vector(1, 2, 3), Vector(4, 5, 6), Vector(7, 8, 9))
val num = 4
val Some((posY, posX)) = v.map(_ indexOf num).zipWithIndex.find(_._1 > -1)
// posY: Int = 0
// posX: Int = 1
Lưu ý rằng có rất nhiều bộ sưu tập trung gian, một phần mà chúng tôi không cần, vv Nếu bạn đang gọi điều này rất nhiều hoặc trên các bộ sưu tập rất lớn, bạn không may có thể cần phải thực hiện một cách tiếp cận cấp bách hơn. Trong trường hợp đó, tôi khuyên bạn nên đóng gói tất cả những điều khó chịu:
def locationOf(v: Vector[Vector[Int]])(num: Int): Option[(Int, Int)] = {
var i, j = 0
var found = false
while (i < v.size && !found) {
j = 0
while (j < v(i).size && !found)
if (v(i)(j) == num) found = true else j += 1
if (!found) i += 1
}
if (!found) None else Some(i, j)
}
Không thanh lịch, nhưng phương pháp này có thể sẽ nhanh hơn và hiệu quả hơn. Nó đủ nhỏ đến nỗi nó không có khả năng chứa bất kỳ lỗi nào mà loại lập trình này dễ bị, và nó liên quan đến sự minh bạch - tất cả các đột biến là cục bộ.
Nguồn
2013-05-12 02:55:49
Xin chào từ khóa học Lập trình chức năng ở Scala! :) –