[iOS] Realm (3) Sort & Filter

린다·2021년 11월 3일
0

Learning iOS

목록 보기
11/13
post-thumbnail

✔️ Sort

Realm에서 데이터를 정렬하기 위해서는 Results.sorted(byKeyPath:ascending:) 메서드를 사용하면 된다.

let realm = try! Realm()
// Dog 테이블에 있는 내용을 모두 불러옴
let dogs = realm.objects(Dog.self)

// name의 값을 기준으로 내림차순 정렬한다.
let dogsSorted = dogs.sorted(byKeyPath: "name", ascending: false)

✔️ Filter

  • 데이터 중 일정 값과 크거나 작은지 동일한지 비교하거나(==, >, <, >=, <=) 배열 혹은 문자열에 포함되는지(in) 동일하지 않은지(!=, <>) 필터링을 통해 원하는 값만 뽑아낼 수 있다.
let highPriorityTasks = tasks.filter("priority > 5")
print("High priority tasks: \(highPriorityTasks.count)")

let unassignedTasks = tasks.filter("assignee == nil")
print("Unassigned tasks: \(unassignedTasks.count)")

let aliOrJamiesTasks = tasks.filter("assignee IN {'Ali', 'Jamie'}")
print("Ali or Jamie's tasks: \(aliOrJamiesTasks.count)")

let progressBetween30and60 = tasks.filter("progressMinutes BETWEEN {30, 60}")
print("Tasks with progress between 30 and 60 minutes: \(progressBetween30and60.count)")
  • 두 가지 이상의 조건들 혹은 조건을 부정하기 위해서는 논리연산자를 사용할 수 있다.
let aliComplete = tasks.filter("assignee == 'Ali' AND isComplete == true")
print("Ali's complete tasks: \(aliComplete.count)")
  • 문자열과 관련되어 더 자세하게 필터링된 정보를 받아올 수 있다.
  • 대소문자를 구분하지 않는 경우에는 [c] 키워드를 사용하면 된다.
  • 분음 부호를 구분하지 않는 경우에는 [d] 키워드를 사용하면 된다고 한다. (ex. é -> e)
// Use [c] for case-insensitivity.
let startWithE = projects.filter("name BEGINSWITH[c] 'e'")
print("Projects that start with 'e': \(startWithE.count)")

let containIe = projects.filter("name CONTAINS 'ie'")
print("Projects that contain 'ie': \(containIe.count)")

// [d] for diacritic insensitivty: contains 'e', 'E', 'é', etc.
let containElike = projects.filter("name CONTAINS[cd] 'e'")
print("Projects that contain 'e', 'E', 'é', etc.: \(containElike.count)")

0개의 댓글