需要协助创建二维数组。
我需要创建以下场景
func textFieldDidBeginEditing(_ textField: UITextField) { // became first responder
//move textfields up
let myScreenRect: CGRect = UIScreen.main.bounds
let keyboardHeight : CGFloat = 216
UIView.beginAnimations( "animateView", context: nil)
var movementDuration:TimeInterval = 0.35
var needToMove: CGFloat = 0
var frame : CGRect = self.view.frame
if (textField.frame.origin.y + textField.frame.size.height + UIApplication.shared.statusBarFrame.size.height > (myScreenRect.size.height - keyboardHeight - 30)) {
needToMove = (textField.frame.origin.y + textField.frame.size.height + UIApplication.shared.statusBarFrame.size.height) - (myScreenRect.size.height - keyboardHeight - 30);
}
frame.origin.y = -needToMove
self.view.frame = frame
UIView.commitAnimations()
}
func textFieldDidEndEditing(_ textField: UITextField) {
//move textfields back down
UIView.beginAnimations( "animateView", context: nil)
var movementDuration:TimeInterval = 0.35
var frame : CGRect = self.view.frame
frame.origin.y = 0
self.view.frame = frame
UIView.commitAnimations()
}
由于我的逻辑遵循上述二维数组,我还需要逻辑来访问单个数据(就像数组一样)。请帮助!!
答案 0 :(得分:3)
有两种推荐方式。一种是构建列表列表并使用lindex
和lset
的多索引版本,另一种是构造用于关联数组的复合键。
# Setup...
set nblist {
{1 2 3 4}
{3 7 5 9 1}
{7 4 9 2 5}
{1 2 4 6}
{1 5 4}
}
# Reading...
set row 1
set column 3
set value [lindex $nblist $row $column]
# Writing...
lset nblist $row $column [expr {$value + 17}]
您可以使用lappend
向表中添加新行,并且(在Tcl 8.6中)使用lset nblist $rowidx end+1 $initval
使用foreach
迭代一行的行或列是微不足道的。
# Setup...
array set nblist {
0,0 1 0,1 2 0,2 3 0,3 4
1,0 3 1,1 7 1,2 5 1,3 9 1,4 1
2,0 7 2,1 4 2,2 9 2,3 2 2,4 5
3,0 1 3,1 2 3,2 4 3,3 6
4,0 1 4,1 5 4,2 4
}
# Reading...
set row 1
set column 3
set value $nblist($row,$column)
# Writing...
set nblist($row,$column) [expr {$value + 17}]
使用这种方法,元素基本上是完全无序的,并且您的键基本上是字符串,但您可以非常简单地访问各个元素。但是,没有行或列的概念;迭代数组的内容会很烦人。