在我重新进入JavaScript(和相关)之前,我已经完成了很多ActionScript 3,并且他们有一个Dictionary对象,它具有弱键,就像即将发布的WeakMap一样; 但AS3版本仍然像常规通用对象一样可枚举,而WeakMap特别没有.keys()
或.values()
.
AS3版本允许我们安装一些非常有趣和有用的构造,但我觉得JS版本有些限制.这是为什么?
如果Flash VM可以做到这一点,那么是什么阻止浏览器做同样的事情呢?我读到了它是如何"非确定性"的,但这有点恰到好处?
我正在使用Delphi XE来实现一个枚举器,它允许按类型过滤列表中的元素.我已经快速组装了一个测试单元如下:
unit uTestList;
interface
uses Generics.Collections;
type
TListItemBase = class(TObject)
end; { TListItemBase }
TListItemChild1 = class(TListItemBase)
end;
TListItemChild2 = class(TListItemBase)
end;
TTestList<T : TListItemBase> = class;
TOfTypeEnumerator<T, TFilter> = class(TInterfacedObject, IEnumerator<TFilter>)
private
FTestList : TList<T>;
FIndex : Integer;
protected
constructor Create(Owner : TList<T>); overload;
function GetCurrent : TFilter;
function MoveNext : Boolean;
procedure Reset;
function IEnumerator<TFilter>.GetCurrent = GetCurrent;
function IEnumerator<TFilter>.MoveNext = MoveNext;
procedure IEnumerator<TFilter>.Reset = Reset;
end;
TOfTypeEnumeratorFactory<T, TFilter> = class(TInterfacedObject, IEnumerable)
private
FTestList : TList<T>;
public
constructor …
Run Code Online (Sandbox Code Playgroud) 我想将一个自定义对象数组传递给一个String.Join
具有以下签名的函数:
public static string Join(string separator, params Object[] values)
public static string Join(string separator, IEnumerable<T> values)
如果我这样调用函数:
var arr = new MyClass[]{ new MyClass(), new MyClass() };
string text = string.Join("\n", arr);
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误:
以下方法或属性之间的调用不明确:'string.Join(string,params object [])'和'string.Join(string,System.Collections.Generic.IEnumerable)'
我可以通过使用IEnumerable<T>
函数来解决歧义:
var arr = new MyClass[]{ new MyClass(), new MyClass() };
string text = string.Join<MyClass>("\n", arr);
Run Code Online (Sandbox Code Playgroud)
但是我可以调用该params object[]
函数吗?在性能关键的情况下,最好是直接访问数组而不是通过枚举器.
我正在使用C#4.0,如果这有任何区别.
在这里和这里阅读问题让我对这种情况有所了解,似乎使用AsEnumerable是内存消耗.有没有更好的方法来实现这个LINQ以及现在的方式,数据是否可靠?
删除AsEnumerable导致"除了Contains运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现".
var results = from p in pollcards.AsEnumerable()
join s in spoils.AsEnumerable() on new { Ocr = p.OCR, fileName = p.PrintFilename } equals new { Ocr = s.seq, fileName = s.inputFileName }
where p.Version == null
orderby s.fileOrdering, s.seq
select new ReportSpoilsEntity
{
seq = s.seq,
fileOrdering = s.fileOrdering,
inputFileName = s.inputFileName,
Ocr = p.OCR,
ElectorName = p.ElectorName
};
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种更惯用的方法来过滤掉数组中的空元素或空元素.
我有很多形式的方法:
def joined
[some_method, some_other_method].compact.reject(&:empty?).join(' - ')
end
Run Code Online (Sandbox Code Playgroud)
这将取和的结果,some_method
并且some_other_method
仅返回非零(compact
基本上等于reject(&:nil?)
)和非空的一个().
在Array或Enumerable中有什么可以一次性获得同样的东西吗?
在.NET中,数组和列表都具有Enumerable作为祖先,因此接受Enumerable作为参数的方法可以接收数组和列表作为其参数.我想知道Java中是否有类似的东西?
如果我使用以下内容:
var myList = Enumerable.Repeat(myCustomObject, 2);
Run Code Online (Sandbox Code Playgroud)
列表中的第二个元素是否是第一个元素的深层副本?
注意: myCustomObject可以是任何Object
编辑:在处理自定义对象时,您能告诉我Enumerable.Repeat的潜在用途吗?
谢谢
目前我正在阅读David A. Black的"The Well-Grounded Rubyist",我坚持10.9章(枚举器和可枚举的下一个维度).我的问题是关于yield
方法.yield
Ruby上下文中单词的含义是什么?我的母语是俄语,谷歌翻译向我展示了一堆翻译变体,让我感到困惑.其中有一些:给予,带来,投降(放弃),生产,同意,遵守和许多其他人.
UPD:请注意这个事实,我试图理解Enumerator :: Yielder#yield方法的含义 ,但不是yield
关键字本身.
UPD_2:我发现了有关枚举器的有趣文章:" Ruby中的懒惰枚举器 ".
我有一系列哈希,类似于
[ {:type=>"Meat", :name=>"one"},
{:type=>"Meat", :name=>"two"},
{:type=>"Fruit", :name=>"four"} ]
Run Code Online (Sandbox Code Playgroud)
我想把它转换成这个
{ "Meat" => ["one", "two"], "Fruit" => ["Four"]}
Run Code Online (Sandbox Code Playgroud)
我尝试了group_by
但是我得到了这个
{ "Meat" => [{:type=>"Meat", :name=>"one"}, {:type=>"Meat", :name=>"two"}],
"Fruit" => [{:type=>"Fruit", :name=>"four"}] }
Run Code Online (Sandbox Code Playgroud)
然后我不能修改它只留下名称而不是完整的哈希.我需要在一行中执行此操作,因为它适用grouped_options_for_select
于Rails表单.
这个问题提到了这个Enumerator::Yielder#yield
方法.我之前没有使用它,我想知道在什么情况下它会有用.
当您想要创建无限的项目列表(例如Eratosthenes的Sieve)以及何时需要使用外部迭代器时,它是否主要有用?
enumerable ×10
ruby ×4
c# ×2
linq ×2
yield ×2
arrays ×1
deep-copy ×1
delphi ×1
ecmascript-6 ×1
entity ×1
generics ×1
hash ×1
idioms ×1
java ×1
javascript ×1
overloading ×1
point ×1
repeat ×1
string ×1
weakmap ×1