如何在tcl中实现二维数组

时间:2017-06-08 06:29:58

标签: arrays tcl ns2

需要协助创建二维数组。

我需要创建以下场景

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()
}

由于我的逻辑遵循上述二维数组,我还需要逻辑来访问单个数据(就像数组一样)。请帮助!!

1 个答案:

答案 0 :(得分:3)

有两种推荐方式。一种是构建列表列表并使用lindexlset的多索引版本,另一种是构造用于关联数组的复合键。

嵌套列表

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

使用这种方法,元素基本上是完全无序的,并且您的键基本上是字符串,但您可以非常简单地访问各个元素。但是,没有行或列的概念;迭代数组的内容会很烦人。