現在、データの保存にRealmSwiftを使用しておりまして、  
下記のように一つのオブジェクトにいくつかの型のデータを保存しています。

```

    class Sample: Object {
        dynamic var number:CGFloat = 0
        dynamic var string:String = ""
    }
    
```

この時に

```

    var floatArr:[CGFloat] = []
    
```

上記のようなCGFloat型の配列に"number"のオブジェクトだけを存在するだけ取り出す。  
ということは可能でしょうか？

参考になりそうなサイトが見つからず、  
公式サイトなどを見ながら実装を試みているのですが、  
なかなかうまく実装できません。
CC BY-SA 3.0
2016-08-25T14:01:20.957
28494
2016-09-11T13:23:17.193
2016-09-11T13:23:17.193
5519
17340
question
swift realm
RealmSwiftで保存したオブジェクトから一つの変数の配列を取り出す方法
`Results`に対して、`valueForKey(_:)`または`valueForKeypath(_:)`を利用して特定のプロパティの集合だけを取り出す、ということが可能です。

```

    let numbers = realm
        .objects(Sample.self)
        .valueForKey("number")
    
```

このとき、`numbers`の型は`NSArray`なので`CGFloat`の配列として扱うにはキャストが必要です。

```

    if let numbers = numbers as? [CGFloat] {
        ...
    }
    
```

もう一つの解として、`map()`を利用する方法もあります。

```

    let numbers = realm
        .objects(Sample.self)
        .map { $0.number }
    
```

もし、最終的にやりたいことが合計や平均を出したい、ということであればわざわざ配列にせずに、直接`sum()`や`average()`メソッドを利用することもできます。

余談ですが、`CGFloat`はデバイスによって型が変わる（32bitまたは64bit）のでRealmに保存するデータ型としてはお勧めしません。例えば、32bitのデバイスから64bitのデバイスに変更してデータを復元するとデータ型が異なるのでマイグレーションが必要になります。Double（またはFloat）を使いましょう。
CC BY-SA 3.0
2016-08-25T21:44:23.123
28498
2016-08-25T21:44:23.123
5519
28494
answer