如果不使用'Unsafe'关键字,可以完成以下操作:
将字段作为参数传递给函数.该函数可以定期更改该字段的值.
所以,如果我有:
int MyField;
Run Code Online (Sandbox Code Playgroud)
和:
MyFunction(ref MyField)
Run Code Online (Sandbox Code Playgroud)
该函数可以存储指针MyField并根据需要更改其值.
在C++中,我们只是传递一个指向该值的指针,然后根据需要进行更改,但我试图找出是否可以在C#中完成.我猜它可以通过反思来完成.
我想做一个实现以下项目的搜索.
现在我通过正则表达式实现了所有这一切,它远远没有涵盖所有内容,我想知道我可以使用ElasticSearch做多少:
同义词
我的理解是,这是在创建索引时实现的.
indexSettings.Analysis.TokenFilters.Add("synonym",new SynonymTokenFilter {Synonyms = new [] {"tire => tire","aluminum => aluminum"},IgnoreCase = true,Tokenizer ="whitespace"});
但是我还需要包含复数吗?要么,
奇异的单词(鞋子和鞋子应该是完全相同的)
这是否意味着我需要将"鞋子"放在同义词列表中?还是有另一种方式?
应允许小的拼写错误,替换和遗漏
所以'汽车','汽车'或'汽车'将匹配.我不知道这是否可能.
忽略所有停止的话
现在我通过正则表达式删除所有'the','this','my'等
我所有的搜索词都是简单的英文单词和数字; 别的什么都不允许.
随着清单:
"A","Bb","C","a","d","bb"
如何在忽略套管的情况下使用LinQ删除重复项?
这里的输出应该是:
"C","d"
简单的例子,在C#中:
i += 1;
Run Code Online (Sandbox Code Playgroud)
我如何用F#中的可变变量编写此代码,而不是:
i <- i + 1
Run Code Online (Sandbox Code Playgroud)
有较短的语法吗?
我有以下几点:
let callbacks = ConcurrentDictionary<string, Object>()
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 TryRemove:
if callbacks.TryRemove(id, myObject : byref<Object>) then ...
Run Code Online (Sandbox Code Playgroud)
不编译;我也试过:
let mutable cc = Object
if callbacks.TryRemove(id, ref cc) then ...
Run Code Online (Sandbox Code Playgroud)
但同样的事情......还有:
let mutable cc = Object
if callbacks.TryRemove(id, &cc) then ...
Run Code Online (Sandbox Code Playgroud)
使用它的正确语法是什么?
我偶然发现了这个页面:http : //jackfoxy.com/simple-lookups-in-fsharp/
它对用于插入和检索的各种集合进行基准测试。
如果我们看一下这张表(网页上的第二张):
String Key by Number of Elements in Lookup Structure, 10,000 random lookups
Map IntMap Dict HashTbl HshMltMap
10^2 1.3 n/a 0.4 0.3 1.5
10^3 1.7 n/a 0.4 0.4 1.5
10^4 3.0 n/a 0.7 0.7 1.8
10^5 5.3 n/a 1.5 1.2 2.4
10^6 8.4 n/a 1.6 1.5 6.3
Run Code Online (Sandbox Code Playgroud)
我们可以看到,当 Map 变大时,使用 Map 进行查找比使用 Dictionary 慢 5 倍。
由于 Map 是只读的,因此可以以最优化的方式组织数据,因为它不处理插入、调整大小等。为什么它这么慢?
我怎样才能以干净的方式实现这样的目标?
让我们想象一下这个简单的代码:
let a () = checkSomeStuff (); None
let b () = do Something (); Some "thing"
let c () = checkSomethingElse (); None
"getOne" {
do! a()
do! b()
do! c()
}
Run Code Online (Sandbox Code Playgroud)
它会返回第一个“Some”。
我可以通过使用 Result 来实现这种确切的行为,其中我通过错误返回值并使用 Ok 继续,但这不可读/不好:
let a () = checkSomeStuff (); Ok ()
let b () = do Something (); Error "thing"
let c () = checkSomethingElse (); Ok ()
result {
do! a()
do! b()
do! c()
}
Run Code Online (Sandbox Code Playgroud)
这是可行的,但我希望在不误用 Result 类型的情况下实现这一目标。用现有的表达方式可以做到吗?