TypeScript(中)+算法(二)

embedded/2024/10/31 14:34:03/

文章目录

    • 算法
      • 排序
        • 冒泡排序
        • 选择排序
  • TS
    • 类型声明
    • 类型推断
    • 类型总览
      • js中的数据类型
      • ts中的数据类型
      • 原始类型和包装对象
        • 原始类型
        • 包装对象
        • 自动装箱
    • 常用类型与语法
      • any
      • unknown
      • never
      • void
        • void 与 undefined
        • 总结

算法

排序

有十种排序算法,分别是:冒泡排序,选择排序,插入排序,希尔排序,归并排序,快速排序,堆排序,基数排序,计数排序,桶排序。今天就先讲一下冒泡和选择

冒泡排序

冒泡排序就是俩个for循环。

内嵌的for是用来求出当前数组最大或最小的那个元素

第一层的for是用来循环查找次最大的元素直到全部排序好。

java">public class HelloWorld {public static void main(String []args) {int[] arr = {1,2,3,4,5,6,7};System.out.println("arr的排序前:\n18  13  50  15  4  17  18 ");int temp  = 0 ;for(int i = 0 ;i< arr.length -1; i++){for(int j = 0; j<arr.length-1-i; j++){if(arr[j]>arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}System.out.println("arr排序后:");for(int i = 0; i<arr.length; i++){System.out.print(arr[i]+"\t");}	}
}
选择排序

选择排序是一种简单直观的排序算法。它的基本思想是每次从待排序的元素中选择最小(或最大)的元素,放置在已排序的部分的末尾,直到所有元素都排序完成。

java">public static void sort(int[] arrays) {for(int i = 0; i < arrays.length; i++) {int min = arrays[i];int temp = i;for(int j = arrays.length - 1; j > i; j--) {if(min > arrays[j]) {min = arrays[j];temp = j;}}arrays[temp] = arrays[i];arrays[i] = min;}

TS

类型声明

使⽤ : 来对变量或函数形参,进⾏类型声明:

typescript">let a: string //变量a只能存储字符串
let b: number //变量b只能存储数值
let c: boolean //变量c只能存储布尔值
a = 'hello'
a = 100 //警告:不能将类型“number”分配给类型“string”
b = 666
b = '你好'//警告:不能将类型“string”分配给类型“number”
c = true
c = 666 //警告:不能将类型“number”分配给类型“boolean”
// 参数x必须是数字,参数y也必须是数字,函数返回值也必须是数字
function demo(x:number,y:number):number{return x + y
}
demo(100,200)
demo(100,'200') //警告:类型“string”的参数不能赋给类型“number”的参数
demo(100,200,300) //警告:应有 2 个参数,但获得 3 个
demo(100) //警告:应有 2 个参数,但获得 1 个

在 : 后也可以写字⾯量类型,不过实际开发中⽤的不多。

typescript">let a: '你好' //a的值只能为字符串“你好”
let b: 100 //b的值只能为数字100
a = '欢迎'//警告:不能将类型“"欢迎"”分配给类型“"你好"”
b = 200 //警告:不能将类型“200”分配给类型“100”

类型推断

TS 会根据我们的代码,进⾏类型推导,例如下⾯代码中的变量 d ,只能存储数字

typescript">let d = -99 //TypeScript会推断出变量d的类型是数字
d = false 

类型推断不是万能的,面对复杂类型时容易推断出问题,还是尽量明确的编写类型声明

类型总览

js中的数据类型

  1. string
  2. number
  3. boolean
  4. null
  5. undefined
  6. object
  7. symbol
  8. bigint

其中object包含Array,Function,Date,Error等

ts中的数据类型

包括上述js类型之外还有几种新类型

  1. any
  2. unknown
  3. never
  4. void
  5. tuple
  6. enum

还有两个用于自定义类型的方式

  1. type
  2. interface

在js中的这些内置构造函数:Number,String,Boolean,用于创建对应的包装对象,在日常开发时很少使用,ts也是同理,所以在ts中进行类型声明时,通常都是用小写的number,string,boolean

typescript">let str1: string
str1 = 'hello'
str1 = new String('hello')let str2: string
str2 = 'haaa'
str2 = new String('haaa')console.log(typeof str1)
console.log(typeof str2)

原始类型和包装对象

原始类型

如number,string,boolean,在js中是简单数据类型,他们在内存中占用空间少,处理速度快

包装对象

如Number对象,String对象,是复杂类型,在内存中占用更多空间,在日常开发时很少由开发人员自己创建包装对象

自动装箱

js在必要时会自动将原始类型包装成对象,以便调用方法或访问属性

typescript">//原始类型
let str ='haaa'
let size=(function(){//1.自动装箱:创建一个临时的String对象包装原始字符串let tsObject = new String(str)//访问String对象的length属性let lengthValue = ts.length//销毁临时对象,返回长度值return lengthValue})()
console.log(size)

常用类型与语法

any

任意类型,⼀旦将变量类型限制为 any ,那就意味着放弃了对该变量的类型
检查。

typescript">// 明确的表示a的类型是 any —— 【显式的any】
let a: any
// 以下对a的赋值,均⽆警告
a = 100
a = '你好'
a = false
// 没有明确的表示b的类型是any,但TS主动推断出来b是any —— 隐式的any
let b
//以下对b的赋值,均⽆警告
b = 100
b = '你好'
b = false

any 类型的变量,可以赋值给任意类型的变量

unknown

未知类型,适⽤于:起初不确定数据的具体类型,要后期才能确定
也可以理解为一个类型安全的any,unknown 会强制开发者在使⽤之前进⾏类型检查,从⽽提供更强的类型安全性。读取 any 类型数据的任何属性都不会报错,⽽ unknown 正好与之相反。

typescript">// 设置a的类型为unknown
let a: unknown
//以下对a的赋值,均符合规范
a = 100
a = false
a = '你好'
// 设置x的数据类型为string
let x: string
x = a //警告:不能将类型“unknown”分配给类型“string”// 设置a的类型为unknown
let a: unknown
a = 'hello'
//第⼀种⽅式:加类型判断
if(typeof a === 'string'){x = aconsole.log(x)
}
//第⼆种⽅式:加断⾔
x = a as string
//第三种⽅式:加断⾔
x = <string>alet str1: string
str1 = 'hello'
str1.toUpperCase() //⽆警告
let str2: any
str2 = 'hello'
str2.toUpperCase() //⽆警告
let str3: unknown
str3 = 'hello';
str3.toUpperCase() //警告:“str3”的类型为“未知”
// 使⽤断⾔强制指定str3的类型为string
(str3 as string).toUpperCase() //⽆警告

never

任何值都不是,即:不能有值,例如 undefined 、 null 、 ‘’ 、 0 都不⾏
⼏乎不⽤ never 去直接限制变量,因为没有意义。
never ⼀般是 TypeScript 主动推断出来的。
never 也可⽤于限制函数的返回值

typescript">/* 指定a的类型为never,那就意味着a以后不能存任何的数据了 */
let a: never
// 以下对a的所有赋值都会有警告
a = 1
a = true
a = undefined
a = null指定a的类型为string
let a: string
// 给a设置⼀个值
a = 'hello'
if (typeof a === 'string') {console.log(a.toUpperCase())
} else {console.log(a) // TypeScript会推断出此处的a是never,因为没有任何⼀个值符合此处的
逻辑
}// 限制throwError函数不需要有任何返回值,任何值都不⾏,像undeifned、null都不⾏
function throwError(str: string): never {throw new Error('程序异常退出:' + str)
}

void

void 的含义是空,即:函数不返回任何值,调⽤者也不应依赖其返回值进⾏任何操作
void 通常⽤于函数返回值声明
在这里插入图片描述
那限制函数返回值时,是不是 undefined 和 void 就没区别呢?—— 有区别。因为还有
这句话 :返回值类型为 void 的函数,调⽤者不应依赖其返回值进⾏任何操作,对⽐下
⾯两段代码:
在这里插入图片描述

void 与 undefined

void 是⼀个⼴泛的概念,⽤来表达“空”,⽽ undefined 则是这种“空”的具体
实现。
因此可以说 undefined 是 void 能接受的⼀种“空”的状态。
也可以理解为: void 包含 undefined ,但 void 所表达的语义超越了 undefi
ned , void 是⼀种意图上的约定,⽽不仅仅是特定值的限制。

总结

如果⼀个函数返回类型为 void ,那么:

  1. 从语法上讲:函数是可以返回 undefined 的,⾄于显式返回,还是隐式返回,这⽆
    所谓
  2. 从语义上讲:函数调⽤者不应关⼼函数返回的值,也不应依赖返回值进⾏任何操作!
    即使我们知道它返回了 undefined。

http://www.ppmy.cn/embedded/133889.html

相关文章

Milvus - GPU 索引类型及其应用场景

1. 背景概述 Milvus 是一款高效的矢量数据库管理系统&#xff0c;支持在高并发和高调用场景下加速相似度搜索。Milvus 的 GPU 支持由 NvidiaRAPIDS 团队提供&#xff0c;可以借助各种 GPU 索引类型来优化性能。本篇将重点解析 Milvus 支持的 GPU 索引类型、适用场景及各自的性…

ChinaDX服务:快速部署,灵活调整,满足企业多样需求

一、服务概述 ChinaDX&#xff0c;即中国联通提供的AWS跨境直连服务&#xff08;China Unicom China Cross-border Direct Connection Service&#xff09;&#xff0c;是一项专为企业客户设计的云互联解决方案。该服务通过快速连接、高性能、安全、灵活的特性&#xff0c;助力…

【Fastjson反序列化漏洞:深入了解与防范】

一、Fastjson反序列化漏洞概述 Fastjson是一款高性能的Java语言JSON处理库&#xff0c;广泛应用于Web开发、数据交换等领域。然而&#xff0c;由于fastjson在解析JSON数据时存在安全漏洞&#xff0c;攻击者可以利用该漏洞执行任意代码&#xff0c;导致严重的安全威胁。 二、F…

大模型,多模态大模型面试问题【P-tuning,VAE,梯度累加,秩,混合精读训练,SVM,softmax,LoRA】

大模型&#xff0c;多模态大模型面试问题【P-tuning,VAE,梯度累加,秩,混合精读训练,SVM,softmax,LoRA】 问题一&#xff1a;P-tuning源码&#xff0c;参数怎么加的&#xff01;问题二&#xff1a;VAE的V是什么回事,相对于AE做出的改进。问题三&#xff1a;梯度累加是解决什么问…

如何将钉钉付款单数据集成到MySQL数据库

钉钉数据集成到MySQL的技术案例分享&#xff1a;供应商对账系统-鸿巢付款单(供应链付款) 在供应链管理中&#xff0c;及时准确地处理付款单数据是确保业务顺畅运行的关键环节。本文将聚焦于一个具体的系统对接集成案例——如何将钉钉平台上的付款单数据高效、安全地集成到MySQ…

使用axios请求分页

npm install axios <template><div><el-table :data"items" style"width: 100%"><el-table-column prop"id" label"ID" /><el-table-column prop"name" label"名称" /><!-- 添…

传奇996_15——有/无补丁添加衣服(角色/玩家)

过程和添加武器过程全部一样&#xff0c;区别在于分类&#xff0c;一个是武器&#xff0c;一个是角色/玩家 无补丁 直接修改装备表&#xff0c;没错和修改武器一样&#xff0c;还是修改装备表 有补丁 打包&#xff0c;打包文件放在D:\chuanqibanben2\客户端\dev\anim\playe…

北京神州分诊叫号系统 doctor 任意文件上传漏洞

0x01 产品描述&#xff1a; ‌北京神州视翰科技有限公司的分诊叫号后台系统‌是一个集成了多种功能的综合管理系统&#xff0c;旨在提升医疗机构的分诊和叫号效率&#xff0c;优化患者就医体验。0x02 漏洞描述&#xff1a; 北京神州分诊叫号系统在/doctor接口处存在任意文件上传…