2017-11-29 12 views
0

トウrealmオブジェクトクラスは、Entryで、その他はWorkです。 below.the Entryクラスはすぐに領域オブジェクトの配列を集計する

open class Entry: Object { 
    dynamic open var date = Entry.defaultDate() 
    dynamic open var quantity = 0.0 
    dynamic open var percentage = 0.0 
    dynamic open var goal = 0.0 
    open let gulps = List<Work>() 
} 

で、Workクラスは次のようになりますようにモデルのシナリオが見えています。

open class Work: Object { 
    dynamic var quantity = 0.0 
    dynamic var type = 0 
} 

いくつかのデータを挿入した後にEntryオブジェクトがこのように見えます。

(Entry { 
    date = 2017-11-29; 
    quantity = 1.193675890564919; 
    percentage = 59.68379452824593; 
    goal = 2; 
    gulps = RLMArray <0x6040000e7800> (
     [0] Work { 
      quantity = 0.5; 
      type = 0; 
     }, 
     [1] Work { 
      quantity = 0.5; 
      type = 1; 
     }, 
     [2] Work { 
      quantity = 0.09683794528245926; 
      type = 0; 
     }, 
     [3] Work { 
      quantity = 0.09683794528245926; 
      type = 2; 
     } 
    ); 
}) 

は、今私はこのエントリの配列があるべきtype.So配列インデックスがWorkに応じですWork種類に応じて合計数量が含まれている配列を作るしようとしています。

[0.59683,0.5,0.09683794528245926] 

この配列を効率的に生成するにはどうすればよいですか?

答えて

0

これはかなり単純であるべきで、map機能リストとランの各項目を反復します

let workArray: [Double] = entry.gulps.map({ return $0.quantity }) 

量を返すgulpsアレイかけて量プロパティとループと一致する型の配列を定義します中カッコ間で定義するクロージャーは、この場合、各作業項目を繰り返し処理し、数量だけを返します。

あなたはマップ機能hereまたはAppleの公式ドキュメントについての詳細をここで

hereは、私が遊び場で書かれた完全な作業例です見つけることができ

struct Entry { 

    var quantity = 0.0 
    var percentage = 0.0 
    var goal = 0.0 
    var gulps = [Work]() 
} 

struct Work { 
    var quantity = 0.0 
    var type = 0 
} 

let work1 = Work(quantity: 1.0, type: 5) 
let work2 = Work(quantity: 2.0, type: 5) 
let work3 = Work(quantity: 4.0, type: 5) 
let work4 = Work(quantity: 6.0, type: 5) 

let entry = Entry(quantity: 5.0, percentage: 50.0, goal: 60.0, gulps: [ 
    work1, 
    work2, 
    work3, 
    work4 
]) 

let workArray: [Double] = entry.gulps.map({ return $0.quantity }) 
print(workArray) 

出力:[1.0、 2.0、4.0、6.0]

+0

あなたの答えに感謝しかし、これは私がオブジェクトfor.Theお願いいたしものではありませんが、迅速なオブジェクトではありませんそれはですrealmオブジェクトと私はまた、** work type **に従って合算して新しい配列を作成することを求めます。もしあなたが5つの作業オブジェクトを持っていたら、2つの作業オブジェクトと作業タイプ5が別の3私の配列は型1と型5の合計である2つの要素を持つ必要があります。ありがとう。 – Rumy

+0

あなたは '[0.59683,0.5,0.09683794528245926]'のような出力を求めました。あなたは合計でグループ化したいならば、あなたはあなたを編集you.Can実際に私が得ていないのですアレイ内のすべてのユニークな仕事の種類のリストを取得し、各作業の種類 – Scriptable

+0

の合計を取得するにはマップやフィルタを使用するフィルタを使用することができます私はあなたのポイントを理解することができます。別のポイント私は '仕事の種類'は静的ではないと言う必要がありますそれはユーザーからの入力です。私はまた、効率的なコーディングを探している実際のデータベースは、 'per entry'はかなり大きいです。もし私が本当の採石場になればいいですね。おかげです。 – Rumy

関連する問題