|
是这样的,最近很多人跟我说:“易语言因为它内容更少,所以做项目时候会更简单”,然后我的看法是“功能越多的东西,做东西会越简单”。
双方争执不下,于是嘛,打算大概搞几个小案例出来看看,实现同样的功能(先不谈性能),双方写起来分别是怎样的体验。
环境、范围等
易语言使用官网原生版本(5.8)。使用自带IDE。
C#使用.Net Core 3.1, 使用Microsoft第一方.Net基础库。使用第一方IDE Visual Studio.
为了尽可能公平,所选择的案例可是尽可能单纯体现语法设计本身的东西,(不然直接掏出个asp core或者ef core啥的就太欺负人了,把.NET基金会搬出来那就不用玩了)
好的,我们来看内容
两数之和
如图

因为易语言官方库没有哈希表功能,所以,直接遍历。
C#写法(其实就是官方解题案例里的写法):

public class Solution
{
public int[] TwoSum(int[] nums, int target)
{
for (int i = 0; i < nums.Length; i++)
{
for(int j = i + 1; j < nums.Length; j++)
{
if(nums[j] == target - nums)
{
return new int[2] { i, j };
}
}
}
return default;
}
}
我们再来看看易语言实现:
首先,易语言的返回值无法定义数组,所以我们稍微封装一层

(ps:这个表叫“自定义数据结构”,可以粗略的理解为一个原始的struct,然后这个作用域是全局的)
.版本 2
.数据类型 Array_Int, 公开
.成员 value, 整数型, , &#34;1&#34;然后函数本体实现
.版本 2
.子程序 TwoSun, Array_Int, , 易语言自身没有数组返回值,使用“自定义数据类型实现
.参数 nums, 整数型, 数组
.参数 target, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 result, Array_Int
i = 1
j = 1
删除成员 (result.value, 1, 1) &#39; “自定义数据类型”不能定义空数组,所以数组默认会有一个长度
.计次循环首 (取数组成员数 (nums), i)
j = i + 1
.判断循环首 (j ≤ 取数组成员数 (nums)) &#39; 数组下标从1开始
.如果真 (nums [j] = target - nums )
加入成员 (result.value, i)
加入成员 (result.value, j)
返回 (result)
.如果真结束
j = j + 1 &#39; 没有 &#34;j++&#34;这类写法
.判断循环尾 ()
.计次循环尾 ()
返回 (result)

在代码中,由于易语言的迭代器功能无法实现自定义初始值,如C#那样for循环的j = i +1, 所以这里使用了&#34;while&#34;的方式实现。
所有的变量写在表里的时候就已经被初始赋值了,所以不需要判空。
<hr/>然后我们再挑一个简单题看一下:
有效括号


然后,我们来看C#实现

using System.Collections.Generic;
public class Solution
{
public bool IsValid(string s)
{
Dictionary<char, char> map = new Dictionary<char, char>() { { &#39;]&#39;, &#39;[&#39; }, { &#39;)&#39;, &#39;(&#39; }, { &#39;}&#39;, &#39;{&#39; } };
Stack<char> stack = new Stack<char>(); //使用Stack或者hashSet或者List<T>之类的各种玩意都行,玩法差不多
foreach(char item in s) //字符串通过迭代器可以直接从string获得char
{
if (map.ContainsKey(item))
{ //走到这儿的都是右半个括号
if (stack.Count == 0)
return false;
else
{
var element = stack.Pop();
if (element != map[item])
return false;
}
}
else
stack.Push(item); //这边都是是左半个括号,直接入栈
}
return stack.Count == 0;
}
}
然后来看易语言实现:

.版本 2
.子程序 IsValid, 逻辑型
.参数 s, 文本型
.局部变量 stack, 文本型, , &#34;0&#34;, &#39;易语言没有Stack,所以这里用一个数组代替
.局部变量 i, 整数型
.局部变量 item, 文本型, , , &#39;不分字符和字符串
.局部变量 element, 文本型
.计次循环首 (取文本长度 (s), i)
&#39; 这种循环用法遇到中文字符就炸了,所以得确保自己知道将会得到的字符串是啥玩意
item = 取文本中间 (s, i, 1)
.如果 (item = “]” 或 item = “)” 或 item = “}”)
.如果 (取数组成员数 (stack) = 0)
返回 (假)
.否则
element = stack [取数组成员数 (stack)]
删除成员 (stack, 取数组成员数 (stack), 1)
.如果真 (element = “(” 且 item ≠ “)”)
返回 (假)
.如果真结束
.如果真 (element = “[” 且 item ≠ “]”)
返回 (假)
.如果真结束
.如果真 (element = “{” 且 item ≠ “}”)
返回 (假)
.如果真结束
.如果结束
.否则
加入成员 (stack, item)
.如果结束
.计次循环尾 ()
返回 (取数组成员数 (stack) = 0)
<hr/>然后,大家还想看什么例子,欢迎留言。
其实挺想加那个await Task的例子的,但怕被x (逃 |
|