angularjs遍历两次

展示班级与学生信息的网页应用
本博客展示了如何使用Angular构建一个简单的网页应用,该应用可以显示不同班级及其学生的信息。
@{
    Layout = null;
}
<!DOCTYPE html>
<html ng-app="my_app">
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/angular.min.js"></script>
    <script type="text/javascript">
        var app = angular.module("my_app", []);
        app.controller('my_controller', function ($scope) {
            var vm = $scope.vm = {};
            vm.classes = [
                {
                    classID: 1, className: '一班',
                    students: [
                        { studentID: 1, studentName: '张三' },
                        { studentID: 2, studentName: '李四' }
                    ]
                },
                {
                    classID: 2, className: '二班',
                    students: [
                        { studentID: 3, studentName: '王五' },
                        { studentID: 4, studentName: '马六' }
                    ]
                },
                {
                    classID: 3, className: '三班',
                    students: [
                        { studentID: 5, studentName: '曹七' },
                        { studentID: 6, studentName: '余八' }
                    ]
                },
                { classID: 4, className: '四班' }
            ];
        });
    </script>
</head>
<body ng-controller="my_controller">
    <table>
        <tr ng-repeat="class in vm.classes">
            <td>{{class.classID}}</td>
            <td>{{class.className}}</td>
            <td>
                <table>
                    <tr ng-repeat="student in class.students">
                        <td>{{student.studentID}}</td>
                        <td>{{student.studentName}}</td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>  
</body>
</html>

在算法和编程中,“两遍历”通常指的是对数据结构(如数组、字符串、链表等)进行两次独立的遍历操作,以完成特定任务。这种策略常见于需要先收集信息再处理信息的场景。例如,第一次遍历用于构建索引或统计信息,第二次遍历用于利用第一次遍历的结果进行实际的处理。 ### 1. 两遍历算法的典型应用 #### LeetCode 中的两遍哈希表方法 在 `twoSum` 问题中,两遍历的方法被用于查找数组中是否存在两个数,其和等于目标值。具体步骤如下: - **第一遍遍历**:将数组中的每个元素及其索引存储到哈希表中。 - **第二遍遍历**:对于每个元素,计算目标值与当前元素的差值,并检查哈希表中是否存在该差值。如果存在,则返回两个元素的索引[^3]。 这种方法确保了查找的时间复杂度为 O(n),因为哈希表的插入和查找操作都是 O(1) 的。 #### 示例代码 ```java public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { map.put(nums[i], i); } for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement) && map.get(complement) != i) { return new int[] { i, map.get(complement) }; } } throw new IllegalArgumentException("No two sum solution"); } ``` ### 2. 两遍历的其他应用场景 #### 字符串处理 在处理字符串时,两遍历可以用于预处理字符串的某些特性。例如,在替换字符串中的空格时,可以先遍历字符串以计算替换后的总长度,然后再从后向前进行替换操作。这种方法避免了多次移动字符,提高了效率。 #### 示例代码 ```c void replaceSpace(char* str) { int olen = strlen(str); int num = 0; for (int i = 0; i < olen; i++) { if (str[i] == ' ') { num++; } } int nlen = olen + num * 2; while (olen < nlen) { if (str[olen] != ' ') { str[nlen--] = str[olen--]; } else { str[nlen--] = '0'; str[nlen--] = '2'; str[nlen--] = '%'; olen--; } } } ``` ### 3. 两遍历的优点和缺点 #### 优点 - **效率高**:通过两次遍历,可以将复杂问题分解为两个简单的子问题,从而降低整体的时间复杂度。 - **逻辑清晰**:两遍历的逻辑通常较为清晰,便于理解和实现。 #### 缺点 - **空间复杂度**:在某些情况下,如使用哈希表来存储中间结果时,可能会增加额外的空间开销。 ### 4. 两遍历与其他算法的对比 - **单遍历**:单遍历通常用于可以在一次遍历中完成任务的场景,例如寻找数组中的最大值或最小值。 - **多遍历**:多遍历适用于需要多次处理数据的场景,例如排序算法中的冒泡排序,它可能需要多次遍历数组以完成排序。 ### 5. 两遍历的实际应用 两遍历算法在实际编程中非常常见,尤其是在处理大规模数据时。例如,在图像处理中,第一次遍历可能用于计算图像的直方图,第二次遍历可能用于应用直方图均衡化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值