2016-06-03 2 views
1

Iv는이 문제를 해결하기 위해 자신의 길을 선택하려했지만 havnt는 행운이있었습니다.사전 A를 특정 점에서 사전 B에 추가?

여기에 해결하려는 문제가 있습니다.

문제

나는 두 개의 사전을 가지고있다. Dictionary AArray of Dictionaries이고 Dictionary BArray of Dictionaries입니다. (아래 예 참조).

이 앱을 설치하면 Firebase DB에서 Dictionary A을 가져와 var dict에 저장합니다. 그런 다음 특정 사용자의 데이터 아래에있는 Firebase DB에서 Dictionary B을 가져옵니다.

Dictionary B의 값을 Dictionary A의 특정 스폿에 넣어야합니다.

Dictionary A에는 게임의 항목이 포함되어 있으며 잠금 해제 할 수 있습니다. Dictionary B에는 특정 사용자가 잠금 해제 한 모든 총이 들어 있습니다.

사전 A (예)

let items : [[String:String]] = [ 

    [ 
     "type" : "Star 1", 
     "model" : "Jungle Spray", 
     "available" : "no", 
     "rarity" : "normal", 
     "totalOwned" : "1", 
     "price" : "9,999" 
    ], 
    [ 
     "type" : "Star 1", 
     "model" : "Predator", 
     "available" : "no", 
     "rarity" : "normal", 
     "totalOwned" : "1", 
     "price" : "10,500" 
    ], 
    [ 
     "type" : "Star 1", 
     "model" : "Safari Mesh", 
     "available" : "no", 
     "rarity" : "normal", 
     "totalOwned" : "1", 
     "price" : "12,950" 
    ], 

사전 B (예) 변경 한 경우에만 일을 볼 수 있듯이

let userUnlocked : [[String: String]] = [ 


     [ 
      "type" : "Star 1", 
      "model" : "Predator", 
      "available" : "yes", 
      "rarity" : "normal", 
      "totalOwned" : "1", 
      "price" : "9,999" 
     ] 

] 

yes에 설정된 값 available입니다. 이 특정 사용자가 총을 열었 음을 의미합니다. 따라서이 배열을 Dictionary A에 덮어 써야 사용자가 잠금을 해제했다는 것을 알 수 있습니다.

답변

1

용어가 다소 혼란 스러울 수 있습니다. 사전에는 특정 순서가 없습니다. 배열 않습니다. Array 메서드 insert (_ : atIndex :)를 사용하여 items 배열에 삽입 할 수 있습니다.

또한 배열이 let으로 선언되면 추가 할 수 없다는 점에 유의하십시오 (var로 변경해야 함).

userUnlocked.insert(items[0], atIndex: 1) 

TIP : 당신은 또한 하나의 배열을 사용하여 '잠금 해제'에 대한 필드를 추가하는 것이 좋습니다. 그러면 다음과 같이 원하는 총을 쉽게 잡을 수 있습니다 :

잠금 해제 된 총의 배열 만 반환합니다. Map, FilterReduce은 Swift!

+0

사전 A는 응용 프로그램의 CollectionViewController에서 특정 데이터 구조를 개략적으로 설명하는 데 사용되는 Firebase의 기본 사전입니다. CollectionViewController의 각 셀은 "총"입니다. 플레이어가 CollectionViewController로 이동하면 사전 A와 사전 B (현재 사용자가 잠금 해제 한 모든 총)가 백업되고 사전 A가 업데이트됩니다. 사전 A를 사용하여 '셀'을 만듭니다 (각 총은 세포). 갱신 된 사전 A의 배열은 키 : value'available = yes'로 이미지를 보여줄 것이고'no'는 잠긴 이미지를 보여줄 것입니다. 이것은 이유입니다 :) – brkr

+0

그게 의미가있는 경우. 사전 A는 사전 배열이므로 인덱스를 저장하더라도 순서는 같지 않습니다. – brkr

+0

사전 배열은 순서를 유지하지만 사전 내의 항목은 순서를 유지하지 않습니다. 각 사전은 고유 한 항목을 나타내므로 해당 항목을 나타내는 구조체가 더 좋은 방법 일 수 있습니다 (더 많은 유연성 제공). – DJohnson

1

왜 항목을 수정하려는 이유에 대한 배열의 인덱스를 어떻게 추적하고 있는지 확실하지 않지만 userUnlock에있는 사전 중 하나의 값에 액세스하여 항목에 값을 설정하면 그것과 동등하다.아래 참조 : 당신이 항목을 수정하려면

1), 당신은 VAR로 변경하는 대신 그것을 만드는 수 있도록해야 일정한

2)의 당신이 "가능"의 값을 설정하려는 가정 해 봅시다

var items : [[String:String]] = [ 

    [ 
    "type" : "Star 1", 
    "model" : "Jungle Spray", 
    "available" : "yes", 
    "rarity" : "normal", 
    "totalOwned" : "1", 
    "price" : "9,999" 
    ], 
    [ 
    "type" : "Star 1", 
    "model" : "Predator", 
    "available" : "no", 
    "rarity" : "normal", 
    "totalOwned" : "1", 
    "price" : "10,500" 
    ], 
    [ 
    "type" : "Star 1", 
    "model" : "Safari Mesh", 
    "available" : "no", 
    "rarity" : "normal", 
    "totalOwned" : "1", 
    "price" : "12,950" 
    ] 
] 

주 : 응답 코드 줄 후

items[0]["available"] = userUnlocked[1]["available"] 

userUnlock

두 번째 사전에 "사용 가능한"키 값에 대한 항목의 첫 번째 키 사전 귀하의 의견에

for i in 0...items.count-1 
{ 
    if items[i]["model"] == "Predator" 
    { 
    items[i]["available"] = "yes" 
    } 
} 

잘하면 도움이됩니다.

+0

'Dictionary A '에서 특정 배열을 업데이트하고 싶다면 어떻게해야합니까? 위의 단 하나의 배열로'Dictionary B '를 업데이트했습니다. 그래서'model = Predator '를 가진'Dictionary A'에서'array'를 갱신하려고합니다. – brkr

+1

나는 대답을 수정하여 내가 끝까지 무엇을 할 것인지 보여 주겠다. –

+0

내가 해결책을 찾는데 도움이된다. 가득 차있는 게임 사전 A에는 100 - 200의 "품목"가있을 것이다. 일반 플레이어는 사전 B에서 20-25 개의 잠금을 해제 할 수 있습니다. 어떻게 사전 B의 모든 배열을 중재하고 사전 A의 올바른 지점에 새 데이터를 복사합니까? (동일한 "모델"을 가진 배열을 의미하는 올바른 자리) – brkr