2016-04-22 12 views
1

Swiftの構造体の配列にデータをロードするにはどうすればよいですか?Swift - 構造体の配列にデータをロード

以下に必要な構文は何ですか?

struct TEST { 
    var a = 0 
    var b = 0 
    var c = 0 
} 

var test: [TEST] = [] 

// Data to load: 
// .a 1,2,3 
// .b 4,5,6 
// .c 7,8,9 

UPDATE 1

@pacificationの対応が遅れて申し訳ありません。

struct TEST { 
    var a: Int 
    var b: Int 
    var c: Int 
} 

var a: [Int] = [1,2,3] 
var b: [Int] = [4,5,6] 
var c: [Int] = [7,8,9] 

let test: [TEST] 

for (index, _) in a.enumerate() { 
    TEST(a: a[index], b: b[index], c: c[index]) 
} 

しかし、私は「試験」配列に値を格納する方法を見ることができません:あなたのアップデート1に基づいて、私はエラーなしで実行されるこのコードを、持っています。私は何が欠けていますか?

+2

読み込むデータの種類は何ですか?配列、辞書、集合、辞書の配列、配列の辞書など? – ozgur

答えて

0

多分あなたは構造体の配列オブジェクトを作成し、そこにデータを保存したいされてどのような私はあなたの質問から解釈この

struct test{ 
     var a:Int 
     var b:Int 
     var c:Int 
     init(a:Int,b:Int,c:Int){ 
      self.a = a 
      self.b = b 
      self.c = c 
     } 
    } 

func addSomeData(){ 
     var array:[test] = [] 
     array.append(test(a: 1, b: 2, c: 3)) 
     array.append(test(a: 4, b: 5, c: 6)) 
     array.append(test(a: 7, b: 8, c: 9)) 
    } 
+1

structのために 'init'を書く必要はありません。自動的にコンパイラによって提供されるからです(@ pacificationの答えにも書かれています)。 – werediver

0

を使用する必要があります。 ここにあなたを助けるかもしれない例があります。

struct TableData{ 
let a : Int 
let b : Int 
let c : Int } 

これまで構造体配列にアクセスするには、そのクラスでその配列を宣言する必要があります。今のアレイにデータを追加

var details = [TableData]() 

を使用すると、構造体配列にデータを格納する方法に依存します。だから私は配列の各要素にアクセスする方法を教えます。

まず、一度に1組の構造体詳細を格納するstructオブジェクトを作成します。このOFC

let data = Tabledata(a:1,b:4,c:7) 
details.append(data) 

はちょうど静的割り当て、私はあなたが詳細を取得し、テーブルの列にそれらを追加し続けるためにループを使用することをお勧めします。

あなたは、いくつかの値の値を取得することができ、これは細部配列に3つのエントリを作成しますループや辞書の概念について知っていると仮定すると、
for i..in 3{ 
    let data = Tabledata(a:some value,b:some value,c:some value) 
    details.append(data) 
      } 

私が助けてくれるのか、それとももっと明確にする必要があるか教えてください。

0

あなたは、この使用する必要があります:struct sがデフォルトinit方法(more info here)を持っているので、あなたがそれを作成する必要がないこと、

struct Test { 
    var a = 0 
    var b = 0 
    var c = 0 
} 


var test: [Test] = [ 
    Test(a: 1, b: 4, c: 7), 
    Test(a: 2, b: 5, c: 8), 
    Test(a: 3, b: 6, c: 9) 
] 

ご注意を。


私はあなたがこのようにそれを行うことができます200

の長さを '試験' 構造体配列を初期化したいUPDATE

var test: [Test] = Array(count: 200, repeatedValue: Test()) 

この構文を使用して 'a'、 'b'、 'c'のデータを入力します: [1,2,3、...]これは可能ですか?

Ahm。どのようなtypeabまたはcあなたのケースに含める必要がありますか? Array


UPDATE 1

// Data to load: 
// .a 1,2,3 
// .b 4,5,6 
// .c 7,8,9 

だから、あなたは、このように行うことができますabc同じ長さの配列ことが確実な場合:

for (index, _) in a.enumerate() { 
    Test(a: a[index], b: b[index], c: [index]) 
} 

そして、すべてのデータ保存されます。

+0

あなたの似通った答えのために芮星晨、ishdeep、pacificationに感謝します。その構文は機能しますが、それはまだ私が必要とするものではありません。私は長さ200の 'test'構造体配列を初期化したいと思います。この構文を使用して 'a'、 'b'、 'c'のデータを入力します:[1,2,3、...] Isこれは可能ですか? –

+0

@SimonYouens私の回答を更新 – pacification

+0

データ型はIntです。私は、この構文を使用して、3つの別々の配列を宣言して読み込んでいます。var a:[Int] = [1,2,3、...] –

0

これは意味ですか? Swiftの構造体は、クラスのような汎用型です。それらはかなり類似しているが、相違点がある。構造体は値型です。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html

たぶん、あなたは辞書を探しています(キー - 値データ)?

var arryOfDictionaries = [ 
     ["a": 1, "b": 2, "c": 3], 
     ["a": 4, "b": 5, "c": 6], 
     ["a": 7, "b": 8, "c": 9] 
    ] 

    // Iterate of the array 
    for dict in arryOfDictionaries { 
     print(dict["a"]) // 1 4 7 
     print(dict["b"]) // 2 5 8 
    } 

    // Add more "rows" 
    var oneMore = ["a": 10, "b": 11, "c": 13] 
    oneMore["c"] = 12 
    arryOfDictionaries.append(oneMore) // Added [10, 11, 12] 

@pacification答えが構造体を使用する最もクリーンな方法です。あなたは上記の提案私の例として、辞書の配列を探していない場合 は、また、あなたは、インスタンスを使用していないので、Structuresことは、クラスのようなタイプを参照していない覚えているのではなく、

IntまたはStringsを使用している場合など)の値をコピー単純な静的クラスも良い候補です。

私の嫌な感じですが、上記の例は、構造体の典型的な使用例のようには見えません。