我有以下课程
public class SolicitacaoConhecimentoTransporte
{
public long ID { get; set; }
public string CodigoOriginal { get; set; }
public DateTime Data { get; set; }
public List<CaixaConhecimentoTransporte> Caixas { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以使用 Linq(使用 lambda 表达式语法)实现以下代码的相同行为,
List<SolicitacaoConhecimentoTransporte> auxList = new List<SolicitacaoConhecimentoTransporte>();
foreach (SolicitacaoConhecimentoTransporte s in listaSolicitacao)
{
SolicitacaoConhecimentoTransporte existing =
auxList.FirstOrDefault(f => f.CodigoOriginal == s.CodigoOriginal &&
f.Data == s.Data &&
f.ID == s.ID);
if (existing == null)
{
auxList.Add(s);
}
else
{
existing.Caixas.AddRange(s.Caixas);
}
}
return auxList;
Run Code Online (Sandbox Code Playgroud)
换句话说,将所有具有相同属性的实体分组并将所有列表合并为一个。 …
我试图通过遍历MatchCollection从Regex一个内表达foreach循环,使用var关键字编译器推断那家伙是给我一个错误,对象Value属性是未知的.
foreach (var chapter in ChapterExtractor.Matches(page.RawContent))
{
chapter.Add(chapter.Value); // Does not compile!
}
Run Code Online (Sandbox Code Playgroud)
何时var被Match它取代它完美无缺.
foreach (Match chapter in ChapterExtractor.Matches(page.RawContent))
{
chapter.Add(chapter.Value); // OK!
}
Run Code Online (Sandbox Code Playgroud)
MSDN(http://msdn.microsoft.com/pt-br/library/system.text.regularexpressions.matchcollection ( v=vs.110 ) .aspx)中提供的示例也在循环中使用Match该类foreach.
但是,编译器不应该推断出chapter类型Match而不是object?所以,似乎编译器隐式执行object转换为Match.真的吗?
我有一个数组,其中包含一些属于集合的值.我想在二进制矩阵中转换此数组,此矩阵的每一列将表示该集合的每个可能值,对于与输入数组匹配的列,行值为1,对于所有其他列,行值为0.我认为这个名字就像二元枢轴.
输入数组是表类型的列
输入数组的示例(前面的示例只是大写字母,导致误解):
'Apple'
'香蕉'
'樱桃'
'Dragonfruit''Apple
'
'樱桃'
所以,在这个例子中,输入可以假设4个不同的值:'Apple','Banana','Cherry'或'Dragonfruit',在我的真实场景中它可以超过4.
示例输出矩阵:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 0 0
0 0 1 0
我已经实现了这种期望的行为,但我想知道是否有更好的方法来执行此操作.以矢量化方式(没有每个类别的for循环)或使用内置函数.
function [ binMatrix, categs ] = pivotToBinaryMatrix( input )
categorizedInput = categorical(input);
categs = categories(categorizedInput);
binMatrix = zeros(size(atributo, 1), size(categorias, 1));
for i = 1: size(caters,1)
binMatrix(:,i) = ismember(categorizedInput, categs(i));
end
end
Run Code Online (Sandbox Code Playgroud)
对于包含9个类别的约50,000个条目,它在0.075137秒内执行.
编辑:我改进了这些例子,因为之前的例子导致了误解.