如何根据条件存储数组值?

时间:2016-12-22 09:39:29

标签: arrays swift

我有string, [int], bool

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

我有display()功能,以便我可以单独查看所有图书的详细信息

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]

我尝试通过执行下面的操作来获得上述结果。我做错了什么?

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]
    } 
}

2 个答案:

答案 0 :(得分:2)

试试这个:

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的建议编辑。

答案 1 :(得分: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
    } 
}

这很有效。