2016-12-22 4 views
0

私はstring, [int], bool条件に応じて配列値を格納する方法は?

var books:[String] = ["Hobbit","LOTR","Fellowship"] 
var chaptersToRead:[[Int]] = [[1],[1,3],[2,3]] 
var read:[Bool] = [false,true,true] 

私はすべての書籍の詳細を見ることができるように機能display()を持つ型の変数を持っている個別

私は条件に基づいて2列に図書の値を格納したい
func display() -> [[Any]] { 
    var output = [[Any]]() 
    for i in 0..<books.count { 
     output.append([books[i], chaptersToRead[i], read[i]]) 
    } 
    return output 
} 

if chaptersToRead = 1

var booksAssigned:[String] = ["Hobbit","LOTR"] 

var readStatus:[Bool] = [false,true] 

Iは、上記の結果bを得ることを試みたが、次のように以下の作業をしていて、動作していない。私は間違って何をしていますか?

var booksAssigned:[String] = [] 
var readStatus:[Bool] = [] 

for (index, books) in display().enumerated() 
{ 
    if chaptersToRead.joined().contains(1) 
    { 
    //I am getting signal SIGABRT error here 
    booksAssigned = books as! [String] 
    } 
} 

for (index, status) in display().enumerated() 
{ 
    if chaptersToRead.joined().contains(1) 
    { 
     //I am getting signal SIGABRT error here 
     readStatus = status as! [Bool] 
    } 
} 
+1

これは不適切なデータ構造です。代わりに構造体の配列を使用する必要があります。 – Hamish

+0

構造体をデータ型として使用してみてください:struct Book { let name:String var chapters:[Int] var isRead:Bool } –

+0

構造体を使用する必要がありますか? – Coder221

答えて

2

はこれを試してみてください。

+0

問題を解決しました。 – Coder221

+2

@ Coder221チャプターの2番目のループを作る必要はありません。単に 'if chapters.contains(1)'を使って配列を追加するだけです。 –

+1

@NiravD、あなたの提案をいただきありがとうございます – Coder221

1

ifブロックからvarキーワードを削除します。すでにこれらの変数が宣言されています。

var booksAssigned:[Any] = [] 
var readStatus:[Any] = [] 

for (index, books) in display().enumerated() 
{ 
    if chaptersToRead.joined().contains(1) 
    { 
     booksAssigned = books 
    } 
} 

for (index, status) in display().enumerated() 
{ 
    if chaptersToRead.joined().contains(1) 
    { 
     readStatus = status 
    } 
} 

これは機能します。

var booksAssigned:[String] = [] 
var readStatus:[Bool] = [] 

for (index, chapters) in chaptersToRead.enumerated() { 
    if chapters.contains(1) { 
     booksAssigned.append(books[index]) 
     readStatus.append(read[index]) 
    } 
} 

print(booksAssigned) 
print(readStatus) 

編集:@Nirav D'sの提案どおりに編集した

+0

実行が中断されたという同じエラー – Coder221

+0

私はコメントを編集しました。 – Macple

+0

これはうまくいきません – Coder221

関連する問題