我正在使用机器学习课程同时学习F#.我做了以下作业练习,这是第二周的第一次练习:
运行计算机模拟以翻转1,000个虚拟公平硬币.每个硬币独立翻转10次.专注于3个硬币如下:c1 是第一个硬币翻转,crand是从1,000中随机选择的硬币,而cmin是具有最小频率的硬币(在领带的情况下选择较早的硬币).
让ν1,νrand ,和νmin是为3枚各自硬币获得了10次投掷的头部分.运行实验100,000次以获得ν1,νrand和νmin的完整分布(请注意,c rand和c min将从运行变为运行).
νmin的平均值是多少?
我已经生成了以下代码,它工作正常并给出了正确的答案:
let private rnd = System.Random()
let FlipCoin() = rnd.NextDouble() > 0.5
let FlipCoinNTimes N = List.init N (fun _ -> FlipCoin())
let FlipMCoinsNTimes M N = List.init M (fun _ -> FlipCoinNTimes N)
let ObtainFrequencyOfHeads tosses =
let heads = tosses |> List.filter (fun toss -> toss = true)
float (List.length (heads)) / float (List.length (tosses)) …Run Code Online (Sandbox Code Playgroud) 我在 Windows 中运行的 ASP .NET Core 2.1 应用程序遇到问题,该应用程序增加了内存消耗,直到最终崩溃并需要终止进程.NET Core Host。我怀疑原因可能是每小时在后台运行一次的同步任务,并且我已确认禁用它可以解决问题。
我一直在使用 VisualStudio 2019 诊断工具分析此同步任务,并且发现了一个我不理解的行为:
正如你所看到的,我拍摄了 3 张快照:
在快照表中,我看到了一个对我来说似乎合乎逻辑的行为:堆大小在任务 (2) 期间显着增长,并且在退出作用域 (3) 时几乎减小到初始大小 (1)。然而,“进程内存”图表显示了一个不同的故事:内存消耗增加了,但它永远不会下降。我已经在发布模式下启动了应用程序dotnet run,并且在查看进程使用的内存时看到了相同的行为.NET Core Host。
我有两个问题:
备注:我使用一个简单的 .NET Core 控制台应用程序(2.1 和 2.2)重现了相同的行为,没有依赖项,因此它没有链接到 ASP 部分或任何其他库:
internal class Program
{
private static void Main()
{
new Whatever().AllocateSomeStrings();
// Snapshot3
Console.ReadKey();
}
}
public class Whatever
{
public void AllocateSomeStrings()
{
// Snapshot1
List<string> numbers = Enumerable.Range(0, 50000).Select(n => n.ToString()).ToList(); …Run Code Online (Sandbox Code Playgroud) 我在这里找到了这个代码:
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector, IEqualityComparer<TKey>? comparer)
{
if (source == null) throw new ArgumentNullException(nameof(source));
if (keySelector == null) throw new ArgumentNullException(nameof(keySelector));
return _(); IEnumerable<TSource> _()
{
var knownKeys = new HashSet<TKey>(comparer);
foreach (var element in source)
{
if (knownKeys.Add(keySelector(element)))
yield return element;
}
}
}
Run Code Online (Sandbox Code Playgroud)
起初我不明白这部分return _(); IEnumerable<TSource> _(),但我意识到这是一个在同一行中调用和声明的本地函数。这是在这里完成的。
我的问题是:与简单地内联该代码相比有什么优势吗?
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector, IEqualityComparer<TKey>? comparer)
{
if (source == null) …Run Code Online (Sandbox Code Playgroud) 我已经在.NET Framework的GUID类型的源代码中看到Equals的实现和==操作符执行非常相似的代码.
为什么==操作符不在firts参数上调用Equals方法?像这样的东西:
public static bool operator ==(Guid a, Guid b)
{
return a.Equals(b);
}
Run Code Online (Sandbox Code Playgroud) 我有这个 PowerShell 脚本,它读取一些环境变量并输出它们:
Write-Host "name: $(tenantName) version: $(versionRelease) url: $(urlApplication)"
Run Code Online (Sandbox Code Playgroud)
这些变量定义为管道变量,并且也定义在 Azure DevOps 发布管道的变量组中。
当在定义为Inline 的PowerShell 任务中运行时,此脚本按预期工作。但是,当使用File Path配置 PowerShell 任务时,相同的脚本将无法工作。在这种情况下,找不到 env 变量:tenantName
tenantName : The term 'tenantName' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Run Code Online (Sandbox Code Playgroud)
有没有办法使环境变量可用于“文件”脚本,就像“内联”脚本一样?
当我想从列表中的最后一个元素迭代到第一个元素时,我通常会这样做:
For i=list.Count-1 to 0 Step -1
'do something
Next
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法使用For Each语句以这种方式迭代列表.
谢谢!
我有两个整数列表(这里是1和0,但可以是任何整数):
List1 : [1; 1; 1; 1]
List2 : [0; 0; 1; 0]
Run Code Online (Sandbox Code Playgroud)
我想计算两个列表之间的值和位置的匹配数.因此,在这种情况下,在第3个位置只有一个匹配.
在C#中,我会使用for循环来解决这个问题,如下所示:
int matches = 0;
for (int i = 0; i < list1.Count; i++)
{
if (list1[i] == list2[i])
matches++;
}
Run Code Online (Sandbox Code Playgroud)
但我想知道在F#中是否有更好的方法.
我开始通过精彩的网站https://fsharpforfunandprofit.com学习F#
在阅读关于将F#与标准命令式语言区分开来的四个关键概念的条目中的模式匹配时,我发现了这句话(强调我的):
这些类型的选择类型可以通过使用子类或接口在C#中进行一些模拟,但是在C# 类型系统中没有内置支持来进行这种与错误检查的详尽匹配.
这对我来说似乎很奇怪,因为我认为我们可以在C#中的接口(或抽象类中的抽象方法)中使用方法定义获得完全等效的结果:它强制执行所有继承类来实现该方法,与F#代码一样,它强制使用draw方法为所有"继承"类型提供实现.
不同的是,在功能情况下,所有的实现都是相同的方法,而在面向对象的情况下,每个执行被封装在同级别......但在概念上你在这两种情况下相同的执法,所以我不知道看到功能方法的任何好处.
我错过了什么吗?有人可以为我澄清一下吗?
的ASP.NET Core配置依赖于Startup应具有一个类Configure方法和可任选地包括一个ConfigureServices方法.
我想知道为什么不强制这个类实现包含这两种方法的接口来获得强类型的所有好处.
我知道真正的原因在于框架设计者的想法无法实现,但任何人都可以给出他们为什么选择不使用界面的充分理由吗?
c# ×3
f# ×3
.net ×1
.net-core ×1
asp.net-core ×1
azure-devops ×1
c#-to-f# ×1
for-loop ×1
foreach ×1
list ×1
oop ×1
performance ×1
powershell ×1
vb.net ×1