2016-04-04 45 views
0

如果循環找到不應存在的元素並將其刪除,則循環遞減循環計數器。如何在沒有可變計數器的情況下編寫Swift 3循環

 var iMax = numListViews 
     for var i = 0; i < numListViews; i += 1 { 
      if (columnsSortTypesArray[i] == "") { 
       columnsSortTypesArray.removeAtIndex(i) 
       i-- 
       iMax-- 
      } else { 
       listViews[i].sortList(columnsSortTypesArray[i]) 
      } 
     } 
+3

什麼是'listViews'?而'columnsSortTypesArray',它是一個'String'數組嗎?什麼是'.sortList'方法應用於'i':'listView'的廣播?請查看[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve),並可能使用更相關(但非臃腫)的信息更新您的問題。 – dfri

+4

您的原始代碼已經有點混淆了。看看'filter()'方法! –

+1

另外,關於上述代碼的註釋:如果'columnsSortTypesArray'的長度(num。元素)只比numListViews略大,但包含多個''「'條目?這可能會在'columnsSortTypesArray [i]'(嘗試)元素訪問時產生一個運行時異常,因爲'從'columnsSortTypesArray'(之後'columnsSortTypesArray'的長度可能是' dfri

回答

-1

您可以用while循環這樣的替換任何C風格的數組:

var i = 0 
while i < numListViews { 
    // the rest of your code here 
    i += 1 
} 

我不知道如果這是你在找什麼,但如果你能具體談談你的類型和爲什麼你想刪除可變的計數器,我會盡力幫助。

+1

技術上正確,但絕不會通過代碼審查。 – nhgrif

+0

在for循環中執行此操作有幾個很好的理由。在這種情況下,作者正在修改循環變量,while循環幾乎是在Swift中完成的唯一方法。當然修改循環內部的循環變量是一個不好的跡象,本身... – ColGraff

+0

這正是爲什麼這永遠不會通過代碼審查。在這種特定情況下,真正需要發生的是'.filter'調用,但我個人不會想到修改循環變量實際上是必要的任何情況。所以我必須申請我的downvote。如果你可以編輯這個來包含一個令人信服的例子,我會真正想要修改循環變量,我會考慮刪除downvote。 – nhgrif

6

您不應該首先使用for循環。 修改循環內的循環變量很容易出錯,並且爲什麼不推薦使用C風格for循環。

從數組中使用filter()刪除空字符串:

columnsSortTypesArray = columnsSortTypesArray.filter { $0 != "" } 

要填充基於此陣列中的其他陣列,使用map(),例如

listViews = columnsSortTypesArray.map { sortList($0) } 

另外:如果有兩個(或更多)陣列,它總是必須保持 同步,考慮以限定具有兩個(或多個)屬性 一個struct WhatEver並使用這些WhatEver元件的單個陣列代替。

相關問題